Python 在数据帧中转置两列或更多列
我有一个数据框,看起来像:Python 在数据帧中转置两列或更多列,python,pandas,Python,Pandas,我有一个数据框,看起来像: PRIO Art Name Value 1 A Alpha 0 1 A Alpha 0 1 A Beta 1 2 A Alpha 3 2 B Theta 2 我如何转换数据帧,即我将所有唯一的名称作为一个列,并带有相应的值(请注意,我希望忽略重复的行)? 因此,在这种情况下: PRIO Art Alpha
PRIO Art Name Value
1 A Alpha 0
1 A Alpha 0
1 A Beta 1
2 A Alpha 3
2 B Theta 2
我如何转换数据帧,即我将所有唯一的名称作为一个列,并带有相应的值(请注意,我希望忽略重复的行)?
因此,在这种情况下:
PRIO Art Alpha Alpha_value Beta Beta_value Theta Theta_value
1 A 1 0 1 1 NaN NaN
2 A 1 3 NaN NaN NaN NaN
2 B NaN NaN NaN NaN 1 2
这里有一种使用的方法。要记住一些棘手的事情:
- 您需要同时指定
作为轴索引'PRIO',Art'
- 我们还可以使用两个聚合函数在一个调用中完成它
- 我们必须重命名0级列以区分它们。因此,您需要交换级别并重命名
Groupby两次,第一次使用值透视名称和后缀。接下来,按相同的命令分组,并找到唯一的值。连接这两个列。在连接中,删除重复的列,并根据需要重命名其他列
g=df.groupby([ 'Art','PRIO', 'Name'])['Value'].\
first().unstack().reset_index().add_suffix('_value')
print(g.join(df.groupby(['PRIO', 'Art','Name'])['Value'].\
nunique().unstack('Name').reset_index()).drop(columns=['PRIO_value','Art'])\
.rename(columns={'Art_value':'Art'}))
Name Art Alpha_value Beta_value Theta_value PRIO Alpha Beta Theta
0 A 0.0 1.0 NaN 1 1.0 1.0 NaN
1 A 3.0 NaN NaN 2 1.0 NaN NaN
2 B NaN NaN 2.0 2 NaN NaN 1.0
这是
pd.crosstab()
和groupby()
的一个示例
只是一个小注释,在这里,
Name
的缺失值保存为0,无论我在哪里喜欢它作为NaN
我知道它将是零,正如您所指出的。非常感谢。
print(out.reset_index())
PRIO Art Alpha_is_present Beta_is_present Theta_is_present Alpha_value \
0 1 A 1.0 1.0 NaN 0.0
1 2 A 1.0 NaN NaN 3.0
2 2 B NaN NaN 1.0 NaN
Beta_value Theta_value
0 1.0 NaN
1 NaN NaN
2 NaN 2.0
g=df.groupby([ 'Art','PRIO', 'Name'])['Value'].\
first().unstack().reset_index().add_suffix('_value')
print(g.join(df.groupby(['PRIO', 'Art','Name'])['Value'].\
nunique().unstack('Name').reset_index()).drop(columns=['PRIO_value','Art'])\
.rename(columns={'Art_value':'Art'}))
Name Art Alpha_value Beta_value Theta_value PRIO Alpha Beta Theta
0 A 0.0 1.0 NaN 1 1.0 1.0 NaN
1 A 3.0 NaN NaN 2 1.0 NaN NaN
2 B NaN NaN 2.0 2 NaN NaN 1.0
df = pd.concat([pd.crosstab([df['PRIO'],df['Art']], df['Name']),df.groupby(['PRIO','Art','Name'])['Value'].sum().unstack().add_suffix('_value')],axis=1).reset_index()
df
| | Alpha | Beta | Theta | Alpha_value | Beta_value | Theta_value |
|:---------|--------:|-------:|--------:|--------------:|-------------:|--------------:|
| (1, 'A') | 1 | 1 | 0 | 0 | 1 | nan |
| (2, 'A') | 1 | 0 | 0 | 3 | nan | nan |
| (2, 'B') | 0 | 0 | 1 | nan | nan | 2 |