gpt4 book ai didi

python - Pandas 在尝试删除重复项时仅删除某些列值

转载 作者:行者123 更新时间:2023-12-01 03:00:36 24 4
gpt4 key购买 nike

我的问题有点类似于this one ,但不完全是。我有一个具有以下结构的 CSV

| id | entrydate  | sales | purchases |
| -- | -----------| ----- | --------- |
| 1 | 05/03/2017 | 10 | 1 |
| 2 | 05/03/2017 | 20 | 2 |
| 3 | 05/03/2017 | 30 | 3 |
| 1 | 05/03/2017 | 40 | 1 |

我正在将其读入数据框,并且我希望获得销售和购买的每日汇总(个人 ID 并不重要,只需每日汇总)。

但是,首先我需要删除重复项。这让我很困惑,因为如果您采用上面的示例,对于 id 1,同一天有两个条目,但 purchases 列中的多个条目是被视为重复,而 sales 列中的多个条目都是有效的,因此正确的分组将导致

| id | entrydate  | sales | purchases |
| -- | -----------| ----- | --------- |
| 1 | 05/03/2017 | 50 | 1 |
| 2 | 05/03/2017 | 20 | 2 |
| 3 | 05/03/2017 | 30 | 3 |

然后获取每日总计会给我

|entrydate   | sales | purchases |
| -----------| ----- | --------- |
| 05/03/2017 | 100 | 6 |

我试图使用删除购买重复项

df = pandas.read_csv('../my-csv.csv', parse_dates=True, dayfirst=True, usecols=my_columns, dtype=my_dtypes).rename(columns=str.lower).assign(date=lambda x: pd.to_datetime(x['entrydate'], format="%d/%m/%Y")).set_index('date')

enter image description here

df = df.drop_duplicates(['id', 'entrydate', 'purchases'])
df.drop(['id'], axis=1, inplace=True)
df = df.groupby(pd.TimeGrouper(freq='D')).sum()

但这虽然会删除重复的购买,但也会删除有效的销售

enter image description here

<小时/>

A-Za-z 解决方案的图片

enter image description here

最佳答案

您可以使用 groupby 两次,首先是汇总销售额

df.sales = df.groupby('id').sales.transform('sum')
df = df.drop_duplicates()
df.groupby(df.entrydate).sum().reset_index()


entrydate sales purchases
0 2017-05-03 100 6

编辑:计算不同日期的总和

df.sales = df.groupby(['id', 'date']).sales.transform('sum')
df = df.drop_duplicates()
df.groupby('date')['sales', 'purchases'].sum().reset_index()

你得到了

    date        sales   purchases
0 2017-03-05 100 6
1 2017-03-06 40 1

关于python - Pandas 在尝试删除重复项时仅删除某些列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43877596/

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