根据条件在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)
对于任何反馈,我们都表示感谢!
回答
您可以使用groupby和pd.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