Python 将值从一个数据帧插入另一个数据帧
好吧,我真正的问题比这更大,但我有一个简单的工作示例Python 将值从一个数据帧插入另一个数据帧,python,python-3.x,pandas,Python,Python 3.x,Pandas,好吧,我真正的问题比这更大,但我有一个简单的工作示例 >>> import pandas as pd >>> import numpy as np >>> a = pd.DataFrame(np.array([[2, 1990], [4,1991], [5,1992]]), \ ... index=[1,2,3], columns=['var', 'yr']) >>> a var
>>> import pandas as pd
>>> import numpy as np
>>> a = pd.DataFrame(np.array([[2, 1990], [4,1991], [5,1992]]), \
... index=[1,2,3], columns=['var', 'yr'])
>>> a
var yr
1 2 1990
2 4 1991
3 5 1992
>>> b = pd.DataFrame(index=a.index, columns=['new_var'])
>>> b
new_var
1 NaN
2 NaN
3 NaN
>>> b[a.yr<1992].loc[:, 'new_var'] = a[a.yr<1992].loc[:, 'var']
>>> b
new_var
1 NaN
2 NaN
3 NaN
使用这些过滤功能,您正在创建一个切片的副本,因此它不会分配 改为这样做:
b.loc[a.yr您还可以使用assign
+query
增加直观性
b.assign(new_var=a.query('yr < 1992')['var'])
new_var
1 2.0
2 4.0
3 NaN
b.assign(new_var=a.query('yr<1992')['var']))
新变种
1 2.0
2 4.0
3南
这将返回所需的dataframe
。如果要将其持久化,则必须将其分配回b
。另一个“创造性”解决方案:
In [181]: b['new_var'] = np.where(a.yr < 1992, a['var'], b['new_var'])
In [182]: b
Out[182]:
new_var
1 2
2 4
3 NaN
[181]中的:b['new_var']=np.where(a.yr<1992,a['var'],b['new_var'])
在[182]:b中
出[182]:
新变种
1 2
2 4
3南
这是一个很好的答案!但是,a
上的切片是不必要的。这就足够了b.loc[a.yrCool。是的,熊猫似乎非常擅长合理简洁。这对于分配+查询;-)@MaxU来说是一个非常不寻常的用例。我一直在尝试推陈出新。
In [181]: b['new_var'] = np.where(a.yr < 1992, a['var'], b['new_var'])
In [182]: b
Out[182]:
new_var
1 2
2 4
3 NaN