Pandas - объединение двух столбцов списков строк - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть .. интересный фрейм данных из базы данных. Фрейм данных имеет два столбца, которые представляют собой списки строк. Мне нужно объединить значения в этих двух списках, чтобы создать новый столбец списков. Например:

data = [ 
    {'id': 1, 'l1': ['Luke', 'Han'], 'l2': ['Skywalker', 'Solo']}, 
    {'id': 2, 'l1': ['Darth', 'Kylo'], 'l2': ['Vader', 'Ren']},
    {'id': 3, 'l1': [], 'l2': []}
]                                                                                                                                                                
df = pd.DataFrame(data)   

Обратите внимание, что в третьей строке нет значений. Вы также можете предположить, что l1 и l2 имеют одинаковую длину. И мне нужно объединить значения в l1 и l2 (с пробелом между ними), например:

result = [
    {'id': 1, 'name': ['Luke Skywalker', 'Han Solo']},
    {'id': 2, 'name': ['Darth Vader', 'Kylo Ren']},
    {'id': 3, 'name': []}
]
result_df = pd.DataFrame(result)

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Вы используете dict comprehension и ' '.join в сочетании с zip для итерации по вашему набору данных, например, это:

import pandas as pd


data = [ 
    {'id': 1, 'l1': ['Luke', 'Han'], 'l2': ['Skywalker', 'Solo']}, 
    {'id': 2, 'l1': ['Darth', 'Kylo'], 'l2': ['Vader', 'Ren']},
    {'id': 3, 'l1': [], 'l2': []}
]                                                                                                                                                                
df = pd.DataFrame(data) 

result = [
    {
        'id': row['id'], 
        'name': [' '.join(l1_l2) for l1_l2 in zip(row['l1'], row['l2'])]
    } for row in data
]

print(pd.DataFrame(result))
>>>
   id                        name
0   1  [Luke Skywalker, Han Solo]
1   2     [Darth Vader, Kylo Ren]
2   3                          []
0 голосов
/ 11 февраля 2020

Я прошу прощения за мерзкий код, который выкидывается на последней минуте. Но это должно привести вас туда, где вы хотите: при условии, что у вас есть только два столбца (если у вас есть больше, просто добавьте один из них '' + df.iloc [j, 3 & or 4 & or ...] [i]), надеюсь, это поможет !

Voila =[]
for j in range(len(df)):
    Voila.append([df.iloc[j,1][i]+ ' '+df.iloc[j,2][i] for i in range(len(df. 
                                                                loc[j,'l1']))])
df['Voila'] = Voila
...