首页 文章

Python Pandas使用Groupby()创建新列.Sum()

提问于
浏览
35

尝试使用groupby计算创建新列 . 在下面的代码中,我得到了每个日期的正确计算值(参见下面的组),但是当我尝试用它创建一个新列(df ['Data4'])时,我得到了NaN . 因此,我尝试在数据框中创建一个新列,其中包含所有日期的“Data3”总和,并将其应用于每个日期行 . 例如,2015-05-08是2行(总计50 5 = 55),在这个新列中,我想在两行中都有55行 .

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

1 回答

  • 125

    您想使用transform这将返回一个索引与df对齐的系列,以便您可以将其添加为新列:

    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
    

相关问题