【问题标题】:Turn pandas column into another row record将 pandas 列转换为另一行记录
【发布时间】:2021-03-31 17:40:29
【问题描述】:
我目前的 pandas df 的简化形式如下:
| Team1 |
Team1_Rank |
Team2 |
Team2_Rank |
Final_Score |
| abc |
1234 |
def |
9876 |
13 - 32 |
创建以下形式的新 df 的有效方法是什么?
| Team |
Team1_Rank |
Opp |
Opp_Rank |
Final_Score |
| abc |
1234 |
def |
9876 |
13 - 32 |
| def |
9876 |
abc |
1234 |
32 - 13 |
【问题讨论】:
标签:
python
pandas
data-manipulation
【解决方案1】:
创建两个 DataFrame 副本,在其中以不同方式重命名列。在第二个中,还将“最终分数”的顺序翻转到“-”周围,然后加入结果。这也维护了每一行的原始索引,这样您就可以看到分组的内容。
df1 = df.rename(columns={'Team1': 'Team', 'Team1_Rank': 'Team_Rank',
'Team2': 'Opp', 'Team2_Rank': 'Opp_Rank'})
df2 = df.rename(columns={'Team1': 'Opp', 'Team1_Rank': 'Opp_Rank',
'Team2': 'Team', 'Team2_Rank': 'Team_Rank'})
df2['Final_Score'] = df2['Final_Score'].str.split(' - ').str[::-1].str.join(' - ')
df = pd.concat([df1, df2])
Team Team_Rank Opp Opp_Rank Final_Score
0 abc 1234 def 9876 13 - 32
0 def 9876 abc 1234 32 - 13