通过pandas中两行的值将行转换为列

M-M*_*M-M 5 python pandas

我有一个大型数据集,它有两列 Name, Value,看起来像这样:

import pandas as pd
data = [['code',10],['classe',12],['series','B'], ['code',12],['classe',1],
['series','C'],['code',16],['classe',18],['series','A']]
df1 = pd.DataFrame(data,columns=['Name','Value'])
df1
Run Code Online (Sandbox Code Playgroud)

产量

    Name    Value
0   code    10
1   classe  12
2   series  B
3   code    12
4   classe  1
5   series  C
6   code    16
7   classe  18
8   series  A
Run Code Online (Sandbox Code Playgroud)

我想要一些这样的事情:

    code  classe series
0   10      10    B
1   12      1     C
2   16      18    A
Run Code Online (Sandbox Code Playgroud)

在我的数据集中它收获了N次,我想将它转换为三列code, classe, series.

感谢您的帮助!

cs9*_*s95 3


pd.concat带有 a 的选项 1groupby应该可以做到。

pd.concat([
     pd.Series(v.values, name=k) for k, v in df1.groupby('Name')['Value']
   ], 
   axis=1
)

  classe code series
0     12   10      B
1      1   12      C
2     18   16      A
Run Code Online (Sandbox Code Playgroud)

选项 2
pivot
Flaky hub hack,不要指望它!该解决方案假定内部值Name定期交替 - 代码、类、系列、代码、类、系列,...等等。否则将无法工作。

df1.assign(Index=df1.index // 3).pivot('Index', 'Name', 'Value')

Name  classe code series
Index                   
0         12   10      B
1          1   12      C
2         18   16      A
Run Code Online (Sandbox Code Playgroud)