假设我有这样的熊猫数据框:import numpy as npimport pandas as pdmy_df = pd.DataFrame(columns=['column 1', 'column 2', 'column 3'], data = [['17.1 g', np.nan, np.nan], [np.nan, '7.0 g', np.nan], [np.nan, '3.7 g', '0.7 g'], [np.nan, np.nan, '1.7 g'], ['1.1 g', np.nan, '1.0 g']])我想要的是: column1 column2 column3 column_new0 17.1 g NaN NaN 17.1 g1 NaN 7.0 g NaN 7.0 g2 NaN 3.7 g 0.7 g 3.7 g3 NaN NaN 1.7 g 1.7 g4 1.1 g NaN 1.0 g 1.1 g我尝试使用apply和join如下但没有得到我希望的输出:my_df['column_new'] = my_df[my_df.columns[0:]].apply(lambda x: ' '.join(x.dropna().astype(str)), axis=1)my_df column 1 column 2 column 3 column_new0 17.1 g NaN NaN 17.1 g1 NaN 7.0 g NaN 7.0 g2 NaN 3.7 g 0.7 g 3.7 g 0.7 g2 NaN NaN 1.7 g 1.7 g3 1.1 g NaN 1.0 g 1.1 g 1.0 g如何通过修改上面的代码获得我想要的输出。预先感谢。编辑:我正在寻找使用上述代码的解决方案来获得预期的输出。尽管使用bfill和逐行的答案中的代码max很好,但它们在我拥有的大数据上效果不佳。
3 回答
凤凰求蛊
TA贡献1825条经验 获得超4个赞
我们可以使用bfill
df['New']=df.bfill(axis=1).iloc[:,0]
df
column 1 column 2 column 3 New
0 17.1 g NaN NaN 17.1 g
1 NaN 7.0 g NaN 7.0 g
2 NaN 3.7 g 0.7 g 3.7 g
3 NaN NaN 1.7 g 1.7 g
4 1.1 g NaN 1.0 g 1.1 g
手掌心
TA贡献1942条经验 获得超3个赞
IIUC,你想要max每行,即使它们不是严格的数字,它似乎至少在提供的数据上运行良好:
my_df['column_new'] = my_df.max(axis=1)
print (my_df)
column 1 column 2 column 3 column_new
0 17.1 g NaN NaN 17.1 g
1 NaN 7.0 g NaN 7.0 g
2 NaN 3.7 g 0.7 g 3.7 g
3 NaN NaN 1.7 g 1.7 g
4 1.1 g NaN 1.0 g 1.1 g
湖上湖
TA贡献2003条经验 获得超2个赞
df = df.assign(new_col=df.replace('g', '', regex=True).astype(float).max(1).astype(str) + ' g'))
添加回答
举报
0/150
提交
取消