如何将DataFrame多列堆叠为一列并保留对应number列数据
解决方案
要实现将多列堆叠为一列并保留对应number值,同时过滤掉包含空值的行,可以按以下步骤操作:
原始数据
| team1 | team2. | team3 | number |
|---|---|---|---|
| bitdefender | holding | bv | 1 |
| gardner | manufacturing | co | 2 |
| indiana | area | school | 3 |
| nhbb | None | None | 2 |
| phenix | None | None | 2 |
实现代码
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'team1': ['bitdefender', 'gardner', 'indiana', 'nhbb', 'phenix'], 'team2.': ['holding', 'manufacturing', 'area', None, None], 'team3': ['bv', 'co', 'school', None, None], 'number': [1, 2, 3, 2, 2] }) # 先过滤掉包含空值的行 df_filtered = df.dropna(subset=['team1', 'team2.', 'team3']) # 堆叠team列并整理结果 result = df_filtered.melt( id_vars='number', value_vars=['team1', 'team2.', 'team3'], value_name='teamtogether' ).drop(columns='variable').reset_index(drop=True) # 调整列顺序(可选) result = result[['teamtogether', 'number']] print(result)
输出结果
| teamtogether | number |
|---|---|
| bitdefender | 1 |
| gardner | 2 |
| indiana | 3 |
| holding | 1 |
| manufacturing | 2 |
| area | 3 |
| bv | 1 |
| co | 2 |
| school | 3 |
(顺序可根据需要调整,核心满足多列堆叠+对应number重复的需求)
内容的提问来源于stack exchange,提问作者Rus Zzzeta
相关产品推荐
相关产品推荐

