msa*_*kya 8 python python-2.7 pandas
我有两个dataframes df1
并df2
从同一个源进行了计算的是,但具有不同的方法,从而大部分值是相同的,具有一定的差异.现在,我想df1
根据中的值进行更新df2
.
例如:
df1 = pd.DataFrame({'name':['john','deb','john','deb'], 'col1':[490,500,425,678], 'col2':[456,625,578,789],'col3':['TN','OK','OK','NY']})
name col1 col2 col3
john 490 456 TN
deb 500 625 OK
john 425 578 OK
deb 678 789 NY
df2 = pd.DataFrame({'name':['deb','john','deb','john','deb'], 'col1':[400,490,500,425,678], 'col2':[225,456,625,578,789],'col3':['TN','TN','OK','OK','NY']})
name col1 col2 col3
deb 400 225 TN
john 490 456 TN
deb 500 625 OK
john 425 578 OK
deb 678 789 NY
Run Code Online (Sandbox Code Playgroud)
所以,在这种情况下,.append
应该追加仅第一行df2
来df1
.所以,只有当一个新行df2
不存在df1
(基于名称和col3
)时才会添加/更新该列,否则它不会.
这几乎concat
应该是应该做的事情.
fir*_*ynx 13
有两种方法可以实现你的结果.
我会告诉你们两个.
Concat然后下降
这应该更加CPU友好
df3 = pd.concat([df1,df2])
df3.drop_duplicates(subset=['name', 'col3'], inplace=True, keep='last')
Run Code Online (Sandbox Code Playgroud)
此方法可能比外连接更占用内存,因为您持有的时间点df1
,df2
以及内存中两个[df1, df2]
(df3
)的连接结果.
外连接然后丢弃
这应该更加内存友好.
df3 = df1.merge(df2, on=list(df1), how='outer')
df3.drop_duplicates(subset=['name', 'col3'], inplace=True, keep='last')
Run Code Online (Sandbox Code Playgroud)
进行outer
连接将确保您从两个数据帧中获取所有条目,但是df3
会比我们使用的情况小concat
.
keep='last'
过去的关键字take_last=True
归档时间: |
|
查看次数: |
9040 次 |
最近记录: |