循环和合并/更新数据

Posted

技术标签:

【中文标题】循环和合并/更新数据【英文标题】:Loop and merge/update data 【发布时间】:2019-11-22 10:16:35 【问题描述】:

我有两个数据框,如下所示:

DF1:

x_id     y_id 
 1       NaN
 2       NaN
 3       NaN 
 4       NaN
 5       NaN
 6       NaN 


DF2:

x_id     y_id 
 1       1
 2       1
 3       1 
 4       2
 5       2
 6       2
 1       3
 3       3 
 :       :
 :       :
 3       y(i)

所以,我想在循环的每次迭代中将 DF2 中的 y_id 合并/插入到 DF1 中的 y_id 中。

到目前为止我所拥有的:

count = df2['y_id'].unique()
for i in count: 
    new_df = df1.merge(df2['y_id']==i], how='inner', left_on='x_id', right_on='x_id')

虽然这会为循环的每次迭代创建一个新的数据框,但我认为应该有更好的方法来做到这一点。

我希望我的最终数据框看起来像:

DF3:

x_id     y_id 
 1       3
 2       1
 3       y(i) 
 4       2
 5       2
 6       2

基本上我想要做的是按 y_id 对 DF2 进行分组,并将它们按排序顺序合并。所以我们可以在 DF2 中看到值 1 和 3 的 y_id = 1,然后在列的更下方,它们的 y_id = 3。由于 3 >1,我想使用这个值(即最大或最近的值,如果我们是处理日期等)

我想做的类似于 SQL 中的更新语句,我们更新列并设置 row = y_id,取最近的值。

希望我已经充分解释了,任何问题都可以问。

谢谢

【问题讨论】:

【参考方案1】:

你可以在merge之前drop_duplicates

df1=df1.drop('y_id',1).merge(df2.drop_duplicates('x_id',keep='last'),on='x_id')
df1
Out[469]: 
   x_id  y_id
0     1     3
1     2     1
2     3     3
3     4     2
4     5     2
5     6     2

【讨论】:

好吧,我的例子应该更好。我的 y_id 列会不断更新,我无法选择要删除的值。

以上是关于循环和合并/更新数据的主要内容,如果未能解决你的问题,请参考以下文章

pandas 将多个数据框合并并更新为一列

我的代码似乎合并了数据集,但它没有更新到访问数据库

pandas:更新和合并数据帧的更好方法

重新发布时合并复制未通过事务复制接收更新

合并的数据行不会在数据库中更新,但添加的数据行会。为啥?

在 PHP CodeIgniter foreach 循环中从数据库中提取和更新数据