我无法制作理想的DataFrame

时间:2018-08-07 06:26:55

标签: python pandas

有类似csv的数据

No,User,A,B,C,D
1 Tom 100 120 110 90
1 Juddy 89 90 100 110
1 Bob 99 80 90 100
2 Tom 80 100 100 70
2 Juddy 79 90 80 70
2 Bob 88 90 95 90
・
・
・

我想将此CSV数据转换为

这样的DataFrame
    Tom_A Tom_B Tom_C Tom_D  Juddy_A Juddy_B Juddy_C Juddy_D  Bob_A Bob_B Bob_C Bob_D
No  
1   100      120    110         90  89      90      100         110
99  80  90  100
2   80       100    100          70 79      90      80      70
88  90  95  90

我运行代码,

import pandas as pd
csv = pd.read_csv("user.csv", header=0, index_col=‘No', sep='\s|,', engine='python')

但是输出不是我的理想选择。我不明白如何使列不像csv中的Tom_A ・ Tom_B ・ Juddy_A那样放弃。

我应该如何修正密码?

1 个答案:

答案 0 :(得分:3)

设置

df = pd.DataFrame({'No': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 2}, 'User': {0: 'Tom', 1: 'Juddy', 2: 'Bob', 3: 'Tom', 4: 'Juddy', 5: 'Bob'}, 'A': {0: 100, 1: 89, 2: 99, 3: 80, 4: 79, 5: 88}, 'B': {0: 120, 1: 90, 2: 80, 3: 100, 4: 90, 5: 90}, 'C': {0: 110, 1: 100, 2: 90, 3: 100, 4: 80, 5: 95}, 'D': {0: 90, 1: 110, 2: 100, 3: 70, 4: 70, 5: 90}})

您要 pivot_table

out = df.pivot_table(index='No', columns='User')

       A              B              C               D
User Bob Juddy  Tom Bob Juddy  Tom Bob Juddy  Tom  Bob Juddy Tom
No
1     99    89  100  80    90  120  90   100  110  100   110  90
2     88    79   80  90    90  100  95    80  100   90    70  70

要获取前缀:

out.columns = out.columns.swaplevel(0,1).to_series().str.join('_')

   Bob_A  Juddy_A  Tom_A  Bob_B  Juddy_B  Tom_B  Bob_C  Juddy_C  Tom_C  Bob_D  Juddy_D  Tom_D
No
1      99       89    100     80       90    120     90      100    110    100      110     90
2      88       79     80     90       90    100     95       80    100     90       70     70