Дф =

car

big.yellow
small.red
small.black

  1. Я хочу добавить значение каждой строки между + +. Желаемый результат:
vehicle = 'The vehicle is big.yellow mine'
vehicle = 'The vehicle is small.red mine' 
vehicle = 'The vehicle is small.black mine'
  1. Мне нужно объединить все эти строки в одну большую строку:
final_vehicle = 'The vehicle is big.yellow mine
                 The vehicle is small.red mine
                 The vehicle is small.black mine'

Но количество строк в реальных данных 1000+. Как я могу ускориться?

1
Mamed 15 Ноя 2020 в 00:21

2 ответа

Лучший ответ
  1. Векторизованный подход к созданию строки для каждого значения строки:
  2. Объедините значения в одну длинную строку одним из следующих способов:
    1. pandas.DataFrame.to_string как final = df.veh.to_string(index=False)
    2. str.join() как {{X3 }}
import pandas as pd
import string  # for test data
import random  # for test data

# create test dataframe
random.seed(365)
df = pd.DataFrame({'car': [random.choice(string.ascii_lowercase) for _ in range(10000)]})

# display(df.head())
car
  v
  j
  w
  y
  e

# add the veh column as strings including the value from the car column
df['veh'] = 'The vehicle is ' + df.car + ' mine'

# display(df.head()
car                    veh
  v  The vehicle is v mine
  j  The vehicle is j mine
  w  The vehicle is w mine
  y  The vehicle is y mine
  e  The vehicle is e mine

# create a long string of all the values in veh
final = df.veh.to_string(index=False)

print(final)
The vehicle is v mine
The vehicle is j mine
The vehicle is w mine
The vehicle is y mine
The vehicle is e mine
...
2
Trenton McKinney 14 Ноя 2020 в 22:25

Этот код, вероятно, решает проблему:

import pandas as pd
df = pd.DataFrame(columns=['id', 'car'])
df['car'] = ['big.yellow', 'small.red', 'small.black']
df['id'] = [1,1,1]

df['new'] = df.groupby('id')['car'].apply(lambda x: ('The vehicle is '+x + '\n').cumsum().str.strip())
df

Полученные результаты:


id  car             new
0   1   big.yellow  The vehicle is big.yellow
1   1   small.red   The vehicle is big.yellow\nThe vehicle is smal...
2   1   small.black The vehicle is big.yellow\nThe vehicle is smal...

И финал:

df['new'][len(df)-1]

Является:

'The vehicle is big.yellow\nThe vehicle is small.red\nThe vehicle is small.black'

0
Milos Bijanic 14 Ноя 2020 в 21:39