我有一个看起来像这样的数据框:
id userid int1 int2 string string2 string3
1 90 5067 1000 aaa 100 qqq
1 90 6945 1000 bbb 101 qqq
1 90 9596 1010 ccc 102 qqq
所需的输出:
id userid int1 int2 string string2 string3
1 90 [5067,6945,9596] [1000,1000,1010] [aaa,bbb,ccc] [100,101,102] qqq
我试图为int1,int2,string,string2创建一个新的数据框,然后将它们合并,但是由于我有一个大数据集,所以此解决方案非常慢。另一种解决方案是使用“ groupby”:
df = df.groupby(['id','userid','string3']).[['int1'],['int2'],['string'],['string2']].apply(list).reset_index()
但这给了我这个错误:
AttributeError: 'Series' object has no attribute 'columns'
任何帮助表示赞赏。
GroupBy.agg
与as_index=False
+DataFrame.reindex
一起使用以初始顺序返回列:
new_df=( df.groupby(['id','userid','string3'],as_index=False)
.agg(list)
.reindex(columns=df.columns) )
print(new_df)
如果需要,可以选择以下列:
cols=['int1','int2','string','string2']
new_df=( df.groupby(['id','userid','string3'],as_index=False)[cols]
.agg(list)
.reindex(columns=df.columns) )
输出量
id userid int1 int2 string \
0 1 90 [5067, 6945, 9596] [1000, 1000, 1010] [aaa, bbb, ccc]
string2 string3
0 [100, 101, 102] qqq
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句