快速熊猫运动

时间:2020-01-02 01:21:57

标签: python pandas

我有一个像这样的数据集:

ID Type Value
01 A    $10
01 B    $12
01 C    $14
02 B    $20
02 C    $21
03 B    $11

我想将其转换为:

ID TypeA TypeB TypeC
01 $10   $12   $14
02 $0    $20   $21
03 $0    $11   $0

我唯一的解决方案是一堆if循环,但是没有几层。谁能帮我解决这个python(pandas)问题?

谢谢

2 个答案:

答案 0 :(得分:1)

将前两列转换为多索引(两级索引)。拆开数据框(将第二级行索引转换为列索引)。用"$"填补空白:

d = df.set_index(['ID', 'Type']).unstack().fillna('$0')

更新列名:

d.columns = 'Type' + d.columns.levels[1]

结果:

Type TypeA TypeB TypeC
ID                    
01     $10   $12   $14
02      $0   $20   $21
03      $0   $11    $0

如果索引名称'Type'困扰您,请将其禁用:

d.columns.name = None

最后,如果您希望ID为列而不是索引,请重置索引:

d.reset_index(inplace=True)

最终结果:

   ID TypeA TypeB TypeC
0  01   $10   $12   $14
1  02    $0   $20   $21
2  03    $0   $11    $0

答案 1 :(得分:1)

您可以使用熊猫

尝试一下,

import pandas as pd

我为您的样本数据创建了一个数据文件psort.txt。

ID,Type,Value
01,A,$10
01,B,$12
01,C,$14
02,B,$20
02,C,$21
03,B,$11

并导入

df = pd.read_csv('psort.txt', header=0)

  ID Type Value
0   1    A   $10
1   1    B   $12
2   1    C   $14
3   2    B   $20
4   2    C   $21
5   3    B   $11

然后我旋转数据框,

df=df.pivot(index='ID',columns='Type', values='Value')

下面,我用0填充NaN值,但是我可以用'$ 0'填充。

df=df.fillna(0)

print(df)

Type    A    B    C
ID                 
1     $10  $12  $14
2       0  $20  $21
3       0  $11    0