快速锻炼

2024-09-29 02:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据集:

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(熊猫)问题吗?你知道吗

谢谢


Tags: 数据idifvaluetype线性解决方案typea
2条回答

将前两列转换为多索引(两级索引)。取消数据帧的堆栈(将第二级行索引转换为列索引)。用"$"填空:

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

你可以用熊猫

试试这个

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

相关问题 更多 >