pandas中dataFrame的数据分组具有相同的行值

时间:2017-11-13 08:32:24

标签: python python-3.x pandas

我有以下格式的csv文件

["name":"111","age":"111"] 

这里输入col1并输出col2。我希望将这些数据转换成类似这样的东西

10  1
20  2
30  3
40  4
50  5
10  6
20  7
30  8
40  9
50  10
10  11
20  12
30  13
40  14
50  15

我怎么能用熊猫做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为您需要按cumcount为新列名创建组,然后按unstack重新整形:

df = df.set_index(['a', df.groupby('a').cumcount()])['b'].unstack()
print (df)
    0   1   2
a            
10  1   6  11
20  2   7  12
30  3   8  13
40  4   9  14
50  5  10  15

对于字典使用to_dict,但在set_index中交换值:

d = df.set_index([df.groupby('a').cumcount(), 'a'])['b'].unstack().to_dict('l')
print (d)

{40: [4, 9, 14], 10: [1, 6, 11], 20: [2, 7, 12], 50: [5, 10, 15], 30: [3, 8, 13]}

详情:

print (df.groupby('a').cumcount())
0     0
1     0
2     0
3     0
4     0
5     1
6     1
7     1
8     1
9     1
10    2
11    2
12    2
13    2
14    2
dtype: int64

设定:

print (df)
     a   b
0   10   1
1   20   2
2   30   3
3   40   4
4   50   5
5   10   6
6   20   7
7   30   8
8   40   9
9   50  10
10  10  11
11  20  12
12  30  13
13  40  14
14  50  15