将多列合并为一列

时间:2019-09-04 01:31:43

标签: python pandas

让我们说我有这样的熊猫数据框:

n -= 1
vlue = vlue * n
b -= 1

我想拥有的是:

import numpy as np
import pandas as pd
my_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_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 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_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 0.7 g 2 NaN NaN 1.7 g 1.7 g 3 1.1 g NaN 1.0 g 1.1 g 1.0 g 和按行bfill的答案中的代码很不错,但是它们不能很好地处理我拥有的大数据。

3 个答案:

答案 0 :(得分:3)

我们可以使用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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

df = df.assign(new_col=df.replace('g', '', regex=True).astype(float).max(1).astype(str) + ' g'))