我有一个如下所示的 CSV 文件:
id1,feat1,feat2,feat3
a,b,asd,asg
c,d,dg,ag
a,e,sdg,as
c,f,as,sdg
c,g,adg,sd
我使用 df = pd.read_csv("file.csv")
将其读入数据框。
我想按 id1
分组,并将所有其他列组合在该组的一行中,并添加标题名称作为前缀。也就是说输出应该是一个看起来像这样的数据框:
a [feat1=b,feat1=e,feat2=asd,feat2=sdg,feat3=asg,feat3=as]
c [feat1=d,feat1=f,feat1=g,feat2=dg,feat2=as,feat2=adg,feat3=ag,feat3=sdg,feat3=sd]
df.groupby('id1')
会让我开始,但我不确定从那里去哪里。
执行此操作的好方法是什么?
最佳答案
您可以使用自定义函数并在 groupby
对象上使用 apply
,该函数会在传递给 zip 列的 Series 上再次调用 apply
将名称和值放入列表中,然后我们执行列表理解并根据需要将其返回到列表中:
In [54]:
def foo(x):
l = (x.apply(lambda x: x.name + '=' + x)).values.tolist()
return pd.Series([[i for j in l for i in j]])
gp = df.groupby('id1')[['feat1','feat2','feat3']]
gp1 = gp.apply(foo)
gp1
Out[54]:
0
id1
a [feat1=b, feat2=asd, feat3=asg, feat1=e, feat2...
c [feat1=d, feat2=dg, feat3=ag, feat1=f, feat2=a...
如果我们查看内容,我们会看到我们有一个值列表:
In [55]:
gp1.iloc[0].values
Out[55]:
array([['feat1=b', 'feat2=asd', 'feat3=asg', 'feat1=e', 'feat2=sdg', 'feat3=as']], dtype=object)
关于python - Pandas groupby,其中所有列都添加到以列名为前缀的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562915/