我有一个带有一对列的 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 |
有什么想法吗?
答案 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