仅唯一日期行的总和

csbfibhn  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(158)

我有一个这样的数据框
Week|co_Week|收入|国家
-|-|
2021年09月19日|2021年01月10日|120|美国
2021年09月19日|2021年03月10日|120|美国
2021年09月19日|2021年03月10日|120|FR
2021年09月|2021年05月10日|15|美国
2021年09月|2021年06月10日|34|FR

现在我想要获得每个唯一周日期的收入总和,因此输出应该如下所示

Week|co_Week|收入|Total_Income|国家
-|
2021年09月19日|2021年01日|120|135|美国
2021年09月19日|2021年03月10日|120|135|美国
2021年09月19日|2021年03月10日|120|154|FR
2021年09月|2021年05月10日|15|135|美国
2021年09月|2021年06月10日|34|154|FR

我尝试使用以下代码,但由于删除了大多数索引,我在新列中以许多Null值结束!

df['Total_revenue'] = df.drop_duplicates(['Revenue']).groupby(df['Country'])['Total_spend'].transform('sum')
z0qdvdin

z0qdvdin1#

IIUC,您可能需要在groupby中添加drop_duplicates

df['Total_revenue'] = (df.groupby('Country')['Revenue']
                         .transform(lambda x: x.drop_duplicates().sum())
                       )

但如果你在不同的星期偶然获得了几倍于相同收入的收入,这可能是有偏见的。

最好使用mask来隐藏重复的值,然后使用groupby.transform('sum')

df['Total_revenue'] = (df['Revenue']
                       .mask(df.duplicated(['week', 'Country']))
                       .groupby(df['Country']).transform('sum')
                       )

输出:

week     co_week  Revenue Country  Total_revenue
0  19/09/2021  01/10/2021      120      US            135
1  19/09/2021  03/10/2021      120      US            135
2  19/09/2021  03/10/2021      120      FR            154
3  20/09/2021  05/10/2021       15      US            135
4  20/09/2021  06/10/2021       34      FR            154

相关问题