![](/img/trans.png)
[英]Group-by and aggregate a data frame with conditions of values from two column
[英]Aggregate data with two conditions
我有一个看起来像这样的数据框:
df =
date name val1 val2
-----------------------------------
14:55:00 name1 1 2
14:55:00 name1 2 4
15:00:00 name2 3 6
15:00:00 name3 4 8
15:05:00 name4 5 10
15:05:00 name5 6 12
如果日期相同,我想做的是聚合数据 - 但前提是名称不同。 所以上面的数据框实际上应该变成:
df_new =
date name val1 val2
-----------------------------------------
15:00:00 name2+name3 7 14
15:05:00 name4+name5 11 22
目前我几乎正在这样做:
df_new = df.groupby("date", as_index=False).agg({"name" : "+".join, "val1" : "sum", "val2" : "sum"})
但是,这也会聚合名称相同的name
,这是不应该的。 编辑:还应该注意,只有几个不同的名称。 名称将在每个日期间隔中重复。 只是当日期聚合时,名称不能相同。
这可以解决吗?
查找重复项,删除它们,然后在日期列上聚合:
(df.drop_duplicates(subset=['date', 'name'],
keep=False)
.groupby('date')
.sum()
)
val1 val2
date
15:00:00 7 14
15:05:00 11 22
您可以使用:
(df.loc[~df.duplicated(subset=['date', 'name'], keep=False)]
.groupby('date', as_index=False)
.agg({"name" : "+".join, "val1" : "sum", "val2" : "sum"})
)
date name val1 val2
0 15:00:00 name2+name3 7 14
1 15:05:00 name4+name5 11 22
在这里,我们首先删除那些我们不想聚合的条目:相同的日期和名称。 如果日期不同,我们仍然保留重复的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.