根据条件在Pandas中添加行(分组)

我在谷歌上搜索了很多关于这个的东西,但找不到适用于我的问题的答案。我遇到的问题是我有一个数据框,每一行都有一个变量,我想连续插入带有变量 C 的行,变量 C 是变量 A + B 的值。示例:

      TOWN        YEAR           Var     Value                 
      Amsterdam   2019            A        1
      Amsterdam   2019            B        2
      Amsterdam   2020            A        1
      Amsterdam   2020            B        3
      Rotterdam   2019            A        4
      Rotterdam   2019            B        4
      Rotterdam   2020            A        5
      Rotterdam   2020            B        2

所需的输出将插入一行并分别为其他列中相同的行求和 A 和 B。我现在的尝试适得其反,因为我使用了 groupby 和 sum,然后将其转换为列表,然后尝试将其附加为单独的列 (var_C)。它适得其反的原因是因为我必须复制每个值以匹配原始数据集的长度。最后,列表的长度与原始数据集的长度不匹配。

data_current = data[data['var'].isin(['A', 'B'])]
data_var_c = data_current.groupby(['TOWN', 'year'])['value'].sum()
values = data_var_c.tolist()
values_dup = [val for val in values for _ in (0, 1)]
len(values_dup)

对于任何反馈,我们都表示感谢!

回答

您可以使用groupbypd.concat

result = (
    pd.concat([
        df,
        df.groupby(['TOWN', 'YEAR'], as_index=False)
        .agg(sum)
        .assign(Var = 'C')
        ])
    )

result = result.sort_values(['TOWN', 'YEAR', 'Var'])

输出:

       TOWN  YEAR Var  Value
0  Amsterdam  2019   A      1
1  Amsterdam  2019   B      2
0  Amsterdam  2019   C      3
2  Amsterdam  2020   A      1
3  Amsterdam  2020   B      3
1  Amsterdam  2020   C      4
4  Rotterdam  2019   A      4
5  Rotterdam  2019   B      4
2  Rotterdam  2019   C      8
6  Rotterdam  2020   A      5
7  Rotterdam  2020   B      2
3  Rotterdam  2020   C      7


以上是根据条件在Pandas中添加行(分组)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>