Нужны Python pandas в формате ниже

#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}