合并两个不重叠的pandas数据框的列

3
我有一个pandas dataframe,其中一对列的每一行,一个单元格是nan,另一个不是。它看起来像这样:
Var1 Var2
0 3 nan
1 8 nan
2 nan 6
3 4 nan
4 nan 2
5 nan 6
我想将这两列合并为一个,不包括nan值:
Var1
0 3
1 8
2 6
3 4
4 2
5 6
有什么想法?

1
df.max(1) 是什么意思? - Henry Yik
5个回答

3
使用fillna函数,将values参数设置为另一个Series。
df['Var1'].fillna(df['Var2'], inplace=True)
df['Var1']

#    Var1
# 0  3
# 1  8
# 2  6
# 3  4
# 4  2
# 5  6

3
为了使输出与原始问题(OP)的输出一致,需要使用.drop('Var2',1)函数。该函数会删除DataFrame中名为"Var2"的列,并返回结果。 - Umar.H

0
您可以使用以下方式利用numpy完成此任务。
import numpy as np
import pandas as pd
df = pd.DataFrame({'v1':[np.nan,2,np.nan,4],'v2':[1,np.nan,3,np.nan]})
df['v'] = np.where(np.isnan(df.v1),df.v2,df.v1)
print(df)

输出

    v1   v2    v
0  NaN  1.0  1.0
1  2.0  NaN  2.0
2  NaN  3.0  3.0
3  4.0  NaN  4.0

0
你可以 stack 帧,这将默认删除 NaN。然后你可以用它的值构造一个新帧:
>>> new_df = pd.DataFrame(df.stack().to_numpy(), columns=["Var1"])
>>> new_df

   Var1
0   3.0
1   8.0
2   6.0
3   4.0
4   2.0
5   6.0

0

另一种方法 - 如果您只有两列。

df.assign(Var1=df.sum(axis=1))[['Var1']]

   Var1
0   3.0
1   8.0
2   6.0
3   4.0
4   2.0
5   6.0

0

另一个版本:

df = df.transform(sorted, key=pd.isna, axis=1).dropna(axis=1, how="all")
print(df)

输出:

      ID  var1
0  103.0  11.0
1  104.0  16.0
2  105.0  71.0
3  106.0   2.0
3  107.0   1.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接