Python:然后逐行组合列

时间:2018-06-14 00:57:26

标签: python list pandas tuples pandas-groupby

我有这个数据框:

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,其中包含两列namecombined。 我正在考虑使用zipgroup,但这些会返回不同的输出。

2 个答案:

答案 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)

使用groupbyapply

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