python - 按日期和总和列分组

标签 python pandas numpy

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

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/

相关文章:

python - 阅读文本并执行不同的功能,python

python - 如何使用带有图像的边界框进行多标签图像训练?

python - 使用 pandas 按月日小时分组

Python - 将美元值转换为 float

python - 删除连续 Pandas 中的前导 0

python - 为什么Python中的十六进制字节数据是b'\x3 5' being interpreted as b' 5'?

python - 查找 3D 数组满足多个条件的索引位置

python - 检查其他 Dataframe 上是否存在值

python - Python 中的 Matlab 等效项 : logical XOR on arrays of different lengths?

python - 如何逐行写入一个csv文件?