Python-如何从pandas groupby().sum()的输出中创建新列?

发布于 2021-02-02 23:20:31

尝试从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
关注者
0
被浏览
191
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你要使用transform此方法将返回索引与df对齐的Series,然后可以将其添加为新列:

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看