【问题标题】:pandas groupby and sum if condition熊猫 groupby 和 sum if 条件
【发布时间】:2020-09-18 21:39:31
【问题描述】:

这是我的数据:

ID;combined_date;EAN;quantity;price1;price2;price3
22138999;20200901;1111111111111;1;5.00;10.00;15.00
22137507;20200901;2222222222222;1;5.00;10.00;15.00
22139440;20200901;1111111111111;1;5.00;15.00;20.00
22138875;20200901;1111111111111;1;5.00;10.00;15.00

如果 EAN 与此数据中的另一个 EAN 强文本相同并且价格 1 + 价格 2 + 价格 3 也与第一个 EAN 相同,我想分组。此外,数量列必须求和。 price1,2,3 不应相加。 ID = 索引

期望的输出:

ID;combined_date;EAN;quantity;price1;price2;price3
22138999;20200901;1111111111111;2;5.00;10.00;15.00
22137507;20200901;2222222222222;1;5.00;10.00;15.00
22139440;20200901;1111111111111;1;5.00;15.00;20.00

到目前为止,我能够从 excel 文件中读取数据并根据某些过滤条件获得过滤后的输出,但我无法进一步对这些数据进行分组。

import pandas as pd

current_file = slsrpt_new.xls

data = pd.read_excel(current_file)
data.set_index('ID', inplace=True)

filter_brand = ['some filter']
filter_sales_channel = ['some filter']

data = data.astype({'EAN': 'str'}).replace('\.0', '', regex=True)
data['price1'] = data['price1'].astype('float').map("{:,.2f}".format)
data['price2'] = data['price2'].astype('float').map("{:,.2f}".format)
data['price3'] = data['price3'].astype('float').map("{:,.2f}".format)

data["combined_date"] = data["Year"].astype(str) + data['Month'].astype('int64').map("{:02}".format) + data['Day'].astype('int64').map("{:02}".format)

to_slsrpt = data[data['brand'].isin( filter_brand ) & (data["sales_channel"].isin( filter_sales_channel))]

print(to_slsrpt[['combined_date', 'EAN', 'quantity', 'price1', 'price2', 'price3']])

谢谢。

【问题讨论】:

  • 贴出你的智能代码
  • 对不起,完成了......

标签: python pandas pandas-groupby


【解决方案1】:

您可以按多个条件对数据进行分组:

df.groupby(['EAN','price1','price2','price3']).sum()

给你

                                    quantity
EAN           price1 price2 price3          
1111111111111 5.00   10.00  15.00          2
                     15.00  20.00          1
2222222222222 5.00   10.00  15.00          1

【讨论】:

    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2013-10-24
    • 2013-06-06
    相关资源
    最近更新 更多