使用 groupby() 对 Pandas DataFrame 中的列执行计算时函数时,通常需要将结果合并回 DataFrame 中。实现此目的的一种方法是根据分组计算创建一个新列。
在提供的示例中,目标是创建一个新列 Data4,其中包含每个日期的 Data3 列的总和.
所提供的代码尝试将分组结果直接分配给新列,但它会产生 NaN 值。要解决这个问题,应该使用transform()方法:
df['Data4'] = df['Data3'].groupby(df['Date']).transform('sum')
transform()方法返回一个与DataFrame索引对齐的Series,允许它直接添加为新列。 'sum' 参数指定我们要执行的计算。
下面更新的代码演示了transform()的正确应用:
import pandas as pd 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') print(df)
修改后的代码的输出正确计算了每个日期的 Data3 的总和,并将结果添加到 DataFrame 作为新列 Data4:
Date Sym Data2 Data3 Data4 0 2015-05-08 aapl 11 5 55 1 2015-05-07 aapl 8 8 108 2 2015-05-06 aapl 10 6 66 3 2015-05-05 aapl 15 1 121 4 2015-05-08 aaww 110 50 55 5 2015-05-07 aaww 60 100 108 6 2015-05-06 aaww 100 60 66 7 2015-05-05 aaww 40 120 121
以上是如何在 groupby().sum() 操作后正确向 Pandas DataFrame 添加新列?的详细内容。更多信息请关注PHP中文网其他相关文章!