Python 具有重复条目的数据透视
我正在尝试转换此数据帧:Python 具有重复条目的数据透视,python,pandas,Python,Pandas,我正在尝试转换此数据帧: | project | id | problem | result | |----------|----|---------|--------| | Project1 | 1 | P1 | True | | Project1 | 1 | P2 | True | | Project1 | 1 | P3 | False | | Project1 | 1 | P4 | True | | Project1 | 1
| project | id | problem | result |
|----------|----|---------|--------|
| Project1 | 1 | P1 | True |
| Project1 | 1 | P2 | True |
| Project1 | 1 | P3 | False |
| Project1 | 1 | P4 | True |
| Project1 | 1 | P5 | NA |
| Project2 | 1 | P1 | True |
| Project2 | 1 | P2 | False |
| Project2 | 1 | P3 | False |
| Project2 | 1 | P4 | NA |
| Project2 | 1 | P5 | True |
为此:
| project | id | P1 | P2 | P3 | P4 | P5 |
|----------|----|------|-------|-------|------|------|
| Project1 | 1 | True | True | False | True | NA |
| Project2 | 1 | True | False | False | NA | True |
我尝试了pivot方法:
df.pivot(index=["project", "id"], columns="problem", values="result")
但是,我得到了一个错误:ValueError:Index包含重复的条目,无法重塑
如何转换数据帧?与自定义lambda函数一起使用:
df = df.pivot_table(index=["project", "id"],
columns="problem",
values="result",
aggfunc=lambda x: x.any() if x.notna().all() else np.nan)
print (df)
problem P1 P2 P3 P4 P5
project id
Project1 1 True True False True NaN
Project2 1 True False False NaN True
如果需要使用NaN
s和布尔值True/False
,可以使用:
使用
pivot\u table
并定义aggfunc
谢谢,什么是aggfunc='any'
?我在@EmreSülün中找不到它-它藏在这里-
df['result'] = df['result'].astype('boolean')
df = df.pivot_table(index=["project", "id"],
columns="problem",
values="result",
aggfunc=lambda x: x.any() if x.notna().all() else np.nan)
print (df)
problem P1 P2 P3 P4 P5
project id
Project1 1 True True False True <NA>
Project2 1 True False False <NA> True
df = df.pivot_table(index=["project", "id"],
columns="problem",
values="result",
aggfunc='any')
print (df)
problem P1 P2 P3 P4 P5
project id
Project1 1 True True False True False
Project2 1 True False False False True