2015-05-14 15 views
15

Próba utworzenia nowej kolumny z obliczeniem groupby. W poniższym kodzie otrzymuję poprawne wyliczone wartości dla każdej daty (zobacz grupę poniżej), ale kiedy próbuję utworzyć nową kolumnę (df ['Data4']) z nią, otrzymuję NaN. Dlatego próbuję utworzyć nową kolumnę w ramce danych z sumą "Dane3" dla wszystkich dat i zastosować ją do każdego wiersza daty. Na przykład 2015-05-08 ma 2 wiersze (łącznie 50 + 5 = 55) iw tej nowej kolumnie chciałbym mieć 55 w obu wierszach.Pandy Pythona Utwórz nową kolumnę za pomocą Groupby(). Suma()

import pandas as pd 
import numpy as np 
from pandas import DataFrame 


df = pd.DataFrame({'Date': ['2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05', '2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05'], 'Sym': ['aapl', 'aapl', 'aapl', 'aapl', 'aaww', 'aaww', 'aaww', 'aaww'], 'Data2': [11, 8, 10, 15, 110, 60, 100, 40],'Data3': [5, 8, 6, 1, 50, 100, 60, 120]}) 

group = df['Data3'].groupby(df['Date']).sum() 

df['Data4'] = group 

Odpowiedz

69

Chcesz użyć transform ten powróci serii z indeksu wyrównany do df więc można następnie dodać je jako nowe kolumny:

In [74]: 

df = pd.DataFrame({'Date': ['2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05', '2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05'], 'Sym': ['aapl', 'aapl', 'aapl', 'aapl', 'aaww', 'aaww', 'aaww', 'aaww'], 'Data2': [11, 8, 10, 15, 110, 60, 100, 40],'Data3': [5, 8, 6, 1, 50, 100, 60, 120]}) 
​ 
df['Data4'] = df['Data3'].groupby(df['Date']).transform('sum') 
df 
Out[74]: 
    Data2 Data3  Date Sym Data4 
0  11  5 2015-05-08 aapl  55 
1  8  8 2015-05-07 aapl 108 
2  10  6 2015-05-06 aapl  66 
3  15  1 2015-05-05 aapl 121 
4 110  50 2015-05-08 aaww  55 
5  60 100 2015-05-07 aaww 108 
6 100  60 2015-05-06 aaww  66 
7  40 120 2015-05-05 aaww 121 
+2

bardzo dziękuję. –

+12

Zaakceptuj moją odpowiedź, jeśli rozwiąże to twoje pytanie, w lewym górnym rogu mojej odpowiedzi pojawi się pusty znak, dzięki – EdChum

+3

I nigdy nie wróciłem: "( – rocarvaj

Powiązane problemy