Python 如何在pandas中实现sql合并
我有一个像这样的数据框Python 如何在pandas中实现sql合并,python,pandas,Python,Pandas,我有一个像这样的数据框 df = pd.DataFrame({"A":[1,2,np.nan],"B":[np.nan,10,np.nan], "C":[5,10,7]}) A B C 0 1.0 NaN 5 1 2.0 10.0 10 2 NaN NaN 7 我想添加一个新列“D”。预期产量为 A B C D 0 1.0 NaN 5 1.0 1 2.0 10.0 10 2.0 2 Na
df = pd.DataFrame({"A":[1,2,np.nan],"B":[np.nan,10,np.nan], "C":[5,10,7]})
A B C
0 1.0 NaN 5
1 2.0 10.0 10
2 NaN NaN 7
我想添加一个新列“D”。预期产量为
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
提前谢谢 我认为您需要通过以下方式选择第一列:
同:
df['D'] = df.fillna(method='bfill',axis=1).iloc[:,0]
print (df)
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
选项1熊猫
df.assign(D=df.lookup(df.index, df.isnull().idxmin(1)))
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
v = df.values
j = np.isnan(v).argmin(1)
df.assign(D=v[np.arange(len(v)), j])
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
选项2numpy
df.assign(D=df.lookup(df.index, df.isnull().idxmin(1)))
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
v = df.values
j = np.isnan(v).argmin(1)
df.assign(D=v[np.arange(len(v)), j])
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
原始时间测试
过度给定的数据 在更大的数据上
另一种方法是按顺序用A、B、C显式填充D列
df['D'] = np.nan
df['D'] = df.D.fillna(df.A).fillna(df.B).fillna(df.C)
另一种方法是使用
pd.Series
的combine\u first
方法。使用您的示例df
>>将熊猫作为pd导入
>>>将numpy作为np导入
>>>df=pd.DataFrame({“A”:[1,2,np.nan],“B”:[np.nan,10,np.nan],“C”:[5,10,7]})
>>>df
A、B、C
01.05
1 2.0 10.0 10
2南南7
我们有
>>df.A.先合并(df.B).先合并(df.C)
0 1.0
1 2.0
2 7.0
我们可以使用reduce
来抽象此模式,以处理任意数量的列
>>从functools导入reduce
>>>cols=[df[c]表示df.columns中的c]
>>>减少(λacc,col:acc.combine_first(col),cols)
0 1.0
1 2.0
2 7.0
名称:A,数据类型:float64
让我们把这些放在一个函数中
def合并(*args):
... 返回减少值(lambda acc,列:acc.combine_first(列),args)
...
>>>合并(*cols)
0 1.0
1 2.0
2 7.0
名称:A,数据类型:float64
熊猫系列已经有一种方法可以做到这一点:
df['D'] = df['A'].combine_first(df['C'])
如果要按顺序查找值,也可以将它们堆叠起来:
df['D'] = df['A'].combine_first(df['B']).combine_first(df['C'])
这将产生以下结果:
>>df
A、B、C、D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2楠楠7.0
第一个代码段中的df
值错误。那么如何计算预期的输出呢?如果我只需要“A”和“C”来创建“D”,那么我可以在哪里指定它。请让我know@Anoop您可以在df['A',C']]
上运行这些方法。这对于numpy
方法尤其有效<代码>v=df['A',C']]。值