Skip to main content
 首页 » 编程设计

python之Pandas 将列折叠成一列

2025年05月04日21daizhj

我正在寻找一种将多列折叠成一个新的单列的方法。鉴于以下数据,我想创建一个名为“日”的新列,并在可用时填充它们的日值。如果一天没有填充,我想返回 None 的值。你能帮我完成这个吗?

df = pd.DataFrame({'Monday': {0: 'Monday', 1: 'None', 2: 'None'}, 
                   'Tuesday': {0: 'None', 1: 'None', 2: 'Tuesday'}, 
                   'Wednesday': {0: 'None', 1: 'None', 2: 'None'}}) 

数据框

   Monday  Tuesday Wednesday 
0  Monday     None      None 
1    None     None      None 
2    None  Tuesday      None 

具有所需输出的新列:

        Day 
0    Monday 
1      None 
2   Tuesday 

我尝试使用 melt 但没有完全完成我要查找的内容并为折叠的每一列创建了额外的行。

我的尝试:

df = pd.melt(df, var_name='Day') 
 
          Day    value 
0      Monday   Monday 
1      Monday     None 
2      Monday     None 
3      Monday     None 
4     Tuesday     None 
5     Tuesday     None 
6     Tuesday  Tuesday 
7     Tuesday     None 
8   Wednesday     None 
9   Wednesday     None 
10  Wednesday     None 
11  Wednesday     None 

请您参考如下方法:

如果每行只需要第一个非缺失值,首先将字符串 None 替换为缺失值 NaN,然后回填缺失值并按位置选择第一列:

df = df.replace('None', np.nan).bfill(axis=1).iloc[:, 0] 
print (df) 
0     Monday 
1        NaN 
2    Tuesday 
3        NaN 
Name: Monday, dtype: object 

详细信息:

print (df.replace('None', np.nan)) 
   Monday  Tuesday  Wednesday 
0  Monday      NaN        NaN 
1     NaN      NaN        NaN 
2     NaN  Tuesday        NaN 
3     NaN      NaN        NaN 
 
print (df.replace('None', np.nan).bfill(axis=1)) 
    Monday  Tuesday Wednesday 
0   Monday      NaN       NaN 
1      NaN      NaN       NaN 
2  Tuesday  Tuesday       NaN 
3      NaN      NaN       NaN 
 
print (df.replace('None', np.nan).bfill(axis=1).iloc[:, 0]) 
0     Monday 
1        NaN 
2    Tuesday 
3        NaN 
Name: Monday, dtype: object