将数据从单列转换为 pandas 中的多列

Transforming the data from a single column into multiple columns in pandas

我正在使用包含以下结构的数据库

ID Test Result
12a Test1 Normal
12a Test3 678.2
3s5 Test2 <1
3s5 Test1 Normal
8r5 Test4 Rectangular(3+)

如您所见,不同的测试有不同的结果格式,并不是每个ID都有所有的测试。

我想将其转换成如下内容:

ID Test1 Test2 Test3 Test4
12a Normal NA 678.2 NA
3s5 Normal <1 NA NA
8r5 NA NA NA Rectangular(3+)

我试过 pandas.pivot 但遇到了以下错误

df.pivot(index="ID",columns="Test",values="Result")

ValueError: Index contains duplicate entries, cannot reshape

将索引更改为 ID 无效,也无法重置索引。

任何帮助将不胜感激!

这是一种方法:

df = {'ID': ['12a', '12a', '3s5', '3s5', '8r5'],
  'Test': ['Test1', 'Test3', 'Test2', 'Test1', 'Test4'],
  'Result': ['Normal', '678.2', '<1', 'Normal', 'Rectangular(3+)']}

df=df.groupby(['ID', 'Test'])['Result'].sum().unstack(fill_value="NA")

您可以尝试使用.pivot_table()代替.pivot(),如下:

df.pivot_table(index="ID", columns="Test", values="Result", aggfunc='first')

结果:

Test   Test1 Test2  Test3            Test4
ID                                        
12a   Normal   NaN  678.2              NaN
3s5   Normal    <1    NaN              NaN
8r5      NaN   NaN    NaN  Rectangular(3+)