#python #pandas #pandas-groupby
#python #панды #группировка по
Вопрос:
Input DataFrame
a b c d e f
1 1 20 1 0.85 3
1 1 20 2 0.85 5
1 1 20 3 0.85 5
Нужен вывод, как показано ниже
a b c newcol
1 1 1 {1:3,2:5,3:5}
столбец newcol должен иметь пару ключ-значение (ключ должен быть столбцом d из ввода, а значение должно быть столбцом f из ввода)
Как мы можем достичь этого, используя python pandas
Ответ №1:
Попробуйте groupby
и to_dict
:
(df.groupby(['a','b','c'])
.apply(lambda x: x.set_index('d')['f'].to_dict())
.reset_index(name='new_col')
)
Вывод:
a b c new_col
0 1 1 20 {1: 3, 2: 5, 3: 5}
Комментарии:
1. Есть ли способ сделать это быстрее? Потому что, когда я пытаюсь выполнить этот шаг для больших данных (~ 5M строк), потребовался почти час.
Ответ №2:
data.csv:
a b c d e f
1 1 20 1 0.85 3
1 1 20 2 0.85 5
1 1 20 3 0.85 5
Код:
import pandas as pd
df = pd.read_csv('data.csv', delimiter='s ')
print (df)
dct = {k: v for k,v in zip(list(df['d']),list(df['f']))}
print (dct)
Вывод:
a b c d e f
0 1 1 20 1 0.85 3
1 1 1 20 2 0.85 5
2 1 1 20 3 0.85 5
{1: 3, 2: 5, 3: 5}