python - 通过 Pandas 中两行的值将行转换为列

标签 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

输出

    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

我想要这样的东西:

    code  classe series
0   10      10    B
1   12      1     C
2   16      18    A

在我的数据集中,它重复了 N 次,我想将其转换为三列 code, classe, series

提前感谢您的帮助!

最佳答案

您可以使用 .pivot 完成此操作

df2 = df1.pivot(columns='Name', values='Value')
pd.concat([df2[series].dropna().reset_index(drop=True) for series in df2], axis=1)

输出

  classe    code    series
0   12       10     B
1   1        12     C
2   18       16     A

更重要的是,如果您更改了有序数据,您仍然会得到所需的输出:

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

    Name    Value
0   code    10
1   classe  12
2   classe  14 #Added classe
3   series  B
4   series  C  #Added Series
5   code    12
6   classe  1
7   series  C
8   code    16
9   classe  18
10  series  A

输出将是:

   classe   code    series
0   12       10      B
1   14       12      C
2   1        16      C
3   18      NaN      A

关于python - 通过 Pandas 中两行的值将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49944501/

相关文章:

python - 使用 timedelta 时小数位太多

python - Openpyxl Unicode 值

python - 使用 JSON 数据更新 Div 时遇到问题

Pandas - 按一列分组并获取所有其他列的平均值

python - 如何获取维基项目的维基百科数据?

Python,字典复制和更新不起作用?

python - 我无法从数据帧保存到 postgresql

python - 验证 Pandas 数据框列

python - 我们可以在pandas中的explode()的替代选项中使用什么?

python-3.x - 如何将大型数据库中的数据加载到 pandas 中?