繁体   English   中英

groupby 和 agg 多列 pandas

[英]groupby and agg with multiple columns pandas

我有这两个df:

df1 = pd.DataFrame({'List' : ['P111', 'P999', 'P111;P999;P777', 'P555', 'P666;P111;P333'],
                    'Color' : ['red', 'red', 'blue','yellow', 'red']})

df2 = pd.DataFrame({'Cod' : ['P111', 'P222', 'P333', 'P444', 'P555', 'P666', 'P777'],
                    'Animal' : ['DOG', 'CAT', 'BUG','SNAKE,DOG', 'CAT,BUG', 'DOG', 'SNAKE'],
                    'Letter' : ['A,F', 'C', 'S,M', 'F,L', 'C,A','M,C', 'Z,L']})

在某些时候我会做类似的事情:

...
.groupby('index')
.agg(List=('List','first'),
     Sequence=('Sequence','first'),
     Animal=('Animal','|'.join),
     Letter=('Letter','|'.join))
...

这可行,但我想知道是否有一种方法可以将 df1 的所有列与 'first' 和 df2 的所有列插入到.agg() 中。 这是因为我的列数并不总是相同,而且有时我的名称中有空格,这会阻止我插入它们

是的,如果您想对一个 go 中的所有列进行聚合,有一种更好的方法:

...
.astype(dict.fromkeys(df2, str))
.groupby('index')
.agg({**dict.fromkeys(df1, 'first'), **dict.fromkeys(df2, '|'.join)})
...

一些细节:

  • dict.fromkeys(iterable, value) :创建一个新的字典,其中的键来自iterable ,值设置为value
  • 需要使用.astype(dict.fromkeys(df2, str))进行类型转换,因为如果df2中的某些列是数字类型,那么'|'.join将不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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