gpt4 book ai didi

python - Pandas :基于另一列的过滤器进行聚合

转载 作者:太空狗 更新时间:2023-10-30 01:12:35 25 4
gpt4 key购买 nike

我有一个看起来像这样的数据框

Month   Fruit   Sales
1 Apple 45
1 Bananas 12
3 Apple 6
1 Kiwi 34
12 Melon 12

我正在尝试获取这样的数据框

Fruit         Sales (month=1)     Sales (month=2)
Apple 55 65
Bananas 12 102
Kiwi 54 78
Melon 132 43

现在我有

df=df.groupby(['Fruit']).agg({'Sales':np.sum}).reset_index()

必须有一些方法可以根据“月份”变量过滤 agg() 中的参数。我只是无法在文档中找到它。有帮助吗?

编辑:感谢您的解决方案。更复杂的是,我还想总结另一个专栏。示例:

Month    Fruit    Sales  Revenue
1 Apple 45 45
1 Bananas 12 12
3 Apple 6 6
1 Kiwi 34 34
12 Melon 12 12

首选输出类似于

            Sales      Revenue
Fruit 1 3 12 1 3 12
0 Apple 61 6 0 61 6 0
1 Bananas 12 6 0 12 6 0
2 Kiwi 34 0 0 34 0 0
3 Melon 0 0 12 0 0 12

我设法用 df.pivot_table(values=['Sales','Revenue'], index='Fruit', columns=['Month'], aggfunc='np.sum') .reset_index(),所以我的问题就解决了。

我尝试用 df.groupby(['Fruit', 'Month'])['Sales','Revenue'].sum().unstack('Month', fill_value=0) 做同样的事情.rename_axis(None, 1).reset_index(),但这会引发 TypeError。 groupby 也可以完成上述操作吗?

最佳答案

要回答更新后的问题,您应该做一些不同的事情。第一group by应该是之后列的元素(月份和水果)。然后计算这些组的总和 unstack之后的 DataFrame 将 Fruit 列保留为索引列。

data = '''
Month Fruit Sales Revenue
1 Apple 45 45
1 Bananas 12 12
1 Apple 16 16
3 Apple 6 6
1 Kiwi 34 34
3 Bananas 6 6
12 Melon 12 12
'''
df = pd.read_csv(StringIO(data), sep='\s+')

df.groupby(['Month', 'Fruit'])\
.sum()\
.unstack(level=0)

结果

        Sales            Revenue           
Month 1 3 12 1 3 12
Fruit
Apple 61.0 6.0 NaN 61.0 6.0 NaN
Bananas 12.0 6.0 NaN 12.0 6.0 NaN
Kiwi 34.0 NaN NaN 34.0 NaN NaN
Melon NaN NaN 12.0 NaN NaN 12.0

旧答案

使用 pivot_table方法:

import pandas as pd
from io import StringIO

data = '''\
Month Fruit Sales
1 Apple 45
1 Bananas 12
1 Apple 16
3 Apple 6
1 Kiwi 34
3 Bananas 6
12 Melon 12
'''
df = pd.read_csv(StringIO(data), sep='\s+')

df.pivot_table('Sales', index='Fruit', columns=['Month'], aggfunc='sum')

结果:

Month      1    3     12
Fruit
Apple 61.0 6.0 NaN
Bananas 12.0 6.0 NaN
Kiwi 34.0 NaN NaN
Melon NaN NaN 12.0

关于python - Pandas :基于另一列的过滤器进行聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42012589/

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