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