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

时间:2021-07-01 14:03:37

标签: python pandas dataframe nan

我有一个带有一对列的 Pandas 数据框,其中在每一行中,一个单元格是 nan,另一个不是。它看起来像这样:

<头>
Var1 Var2
0 3
1 8
2 6
3 4
4 2
5 6

我想在没有 nans 的情况下将这两列合并为一列:

<头>
Var1
0 3
1 8
2 6
3 4
4 2
5 6

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

使用 fillna,将 values 参数设置为另一个系列。

df['Var1'].fillna(df['Var2'], inplace=True)
df['Var1']

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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

答案 4 :(得分:0)

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

A_x = A.T[(A[0]>0).any(axis=0).T].T