我有以下格式的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
我怎么能用熊猫做到这一点?
答案 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