繁体   English   中英

聚合具有两个条件的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM