Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有重复条目的数据透视_Python_Pandas - Fatal编程技术网

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