python - Pandas groupby,其中所有列都添加到以列名为前缀的列表中

标签 python pandas

我有一个如下所示的 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/

相关文章:

python - 是否可以打开 PyGTK 对象?

python - 仅当验证准确性提高时,我如何才能保存/覆盖我的 TensorFlow/Keras 模型?

Python:将数据帧列中的秒转换为日期时间格式

python - Pandas .isin 包含列表的列条目

python - 更改 holoviews 直方图上的 x 轴 (xlim)

python - 如何修复 "no module named cv2"?

python - 替换字符串 Python

python - 将 JSON 导入 Pandas DataFrame

python - Pandas 数据框为每组获取最小的 NaN 和最小的非 NaN 行

python-3.x - Pandas 的唯一值数量并按唯一值的数量排序