我有这个数据框:
In [182]: data_set
Out[182]:
name parent distance rank
0 x aaa 10 1
1 x bbb 5 1
2 x fff 3 2
3 y aaa 2 2
4 y bbb 10 1
5 z ccc 8 2
我想重塑它:
name Combined
x ('aaa',10,1),('bbb',5,1),('fff',3,2)
y ('aaa',2,2),('bbb',10,1)
z ('ccc',8,2)
然后我想将其转换为dataframe 3x2
,其中包含两列name
和combined
。
我正在考虑使用zip
或group
,但这些会返回不同的输出。
答案 0 :(得分:1)
首先将您的列合并到tuple
,然后groupby
合并到list
。
df['combined'] = df[['parent', 'distance', 'rank']].apply(tuple, axis=1)
res = df.groupby('name')['combined'].apply(list).reset_index()
print(res)
name combined
0 x [(aaa, 10, 1), (bbb, 5, 1), (fff, 3, 2)]
1 y [(aaa, 2, 2), (bbb, 10, 1)]
2 z [(ccc, 8, 2)]
答案 1 :(得分:1)
使用groupby
和apply
df.groupby('name')[['parent','distance','rank']].apply(lambda x : x.values.tolist())
Out[14]:
name
x [[aaa, 10, 1], [bbb, 5, 1], [fff, 3, 2]]
y [[aaa, 2, 2], [bbb, 10, 1]]
z [[ccc, 8, 2]]
dtype: object