循环和合并/更新数据
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 列会不断更新,我无法选择要删除的值。以上是关于循环和合并/更新数据的主要内容,如果未能解决你的问题,请参考以下文章