python:如何组合数据帧中的行

时间:2017-05-02 16:57:48

标签: python pandas dictionary dataframe

我尝试在数据帧中将行与apply函数组合在一起,但是不能。 如果列(c1 + c2)信息相同,我想将行组合到一个列表中。

例如

Dataframe df1
         c1  c2  c3
    0    0   x  {'a':1 ,'b':2}
    1    0   x  {'a':3 ,'b':4}
    2    0   y  {'a':5 ,'b':6}
    3    0   y  {'a':7 ,'b':8}
    4    2   x  {'a':9 ,'b':10}
    5    2   x  {'a':11 ,'b':12}

预期结果

Dataframe df1
        c1   c2  c3
    0    0   x  [{'a':1 ,'b':2},{'a':3 ,'b':4}]
    1    0   y  [{'a':5 ,'b':6},{'a':7 ,'b':8}]
    2    2   z  [{'a':9 ,'b':10},{'a':11,'b':12}]

1 个答案:

答案 0 :(得分:1)

来源熊猫DF:

In [20]: df
Out[20]:
   c1 c2                  c3
0   0  x    {'a': 1, 'b': 2}
1   0  x    {'a': 3, 'b': 4}
2   0  y    {'a': 5, 'b': 6}
3   0  y    {'a': 7, 'b': 8}
4   2  x   {'a': 9, 'b': 10}
5   2  x  {'a': 11, 'b': 12}

解决方案:

In [21]: df.groupby(['c1','c2'])['c3'].apply(list).to_frame('c3').reset_index()
Out[21]:
   c1 c2                                       c3
0   0  x     [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]
1   0  y     [{'a': 5, 'b': 6}, {'a': 7, 'b': 8}]
2   2  x  [{'a': 9, 'b': 10}, {'a': 11, 'b': 12}]

注意:我建议您避免在Pandas DFs单元格中使用非标量值 - 这可能会导致各种困难和性能问题