我正在寻找一种将多列折叠成一个新的单列的方法。鉴于以下数据,我想创建一个名为“日”的新列,并在可用时填充它们的日值。如果一天没有填充,我想返回 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
