gpt4 book ai didi

python - 按日期和总和列分组

转载 作者:行者123 更新时间:2023-12-04 13:27:59 25 4
gpt4 key购买 nike

我有一个设计选择很差的数据框,如下所示:

df = pd.DataFrame({
'Day': ['2021-03-01', '2021-03-01', '2021-03-02', '2021-03-02', '2021-03-03'],
'Name': ['Sam', 'Sam', 'Jack', 'Steve', 'Steve'],
'Fruit':['Apple', 'Apple', 'Banana', 'Apple', 'Banana'],
'2021-03-01':['2', '1', '0', '1', '1'],
'2021-03-02': ['3', '5', '4', '2', '1'],
'2021-03-03':['7', '3', '2', '1', '4']})

df
Day Name Fruit 2021-03-01 2021-03-02 2021-03-03
0 2021-03-01 Sam Apple 2 3 7
1 2021-03-01 Sam Apple 1 5 3
2 2021-03-02 Jack Banana 0 4 2
3 2021-03-02 Steve Apple 1 2 1
4 2021-03-03 Steve Banana 1 1 4

我想要,对于 Day 中的每个日期, 对应于列名与 Day 的值相同的列中的日期,将其他变量分组并按总和聚合它们。
例如,如果 Day值为“2021-03-01”,然后在“2021-03-01”列中,我将对值求和(该列中苹果的 nr 和香蕉的 nbr)。
它希望结果数据框看起来像这样:
         Date   Name  nrApples  nrBananas
0 2021-03-01 Sam 3 0
1 2021-03-02 Jack 0 4
2 2021-03-02 Steve 2 0
3 2021-03-03 Steve 0 4
问题是我有很多这样的日期列,我不知道如何检查 Day中的值是否存在columns 与列的名称相同,并聚合它的值。
谢谢你的帮助。

最佳答案

融化列,比较Day列到 variable包含 Days、groupby、aggregate(sum)、unstack 和 reset 索引的列:

(df
.melt(['Day', 'Name', 'Fruit'])
.loc[lambda df: df.Day.eq(df.variable)]
.astype({"value": int})
.groupby(['Day', 'Name', 'Fruit'])['value']
.sum()
.unstack(fill_value = 0)
.add_prefix("nr")
.reset_index()
.rename_axis(columns = None)
)

Fruit Day Name nrApple nrBanana
0 2021-03-01 Sam 3 0
1 2021-03-02 Jack 0 4
2 2021-03-02 Steve 2 0
3 2021-03-03 Steve 0 4

关于python - 按日期和总和列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66960847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com