【问题标题】: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,取最近的值。

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

谢谢

【问题讨论】:

    标签: python pandas merge group-by


    【解决方案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 列会不断更新,我无法选择要删除的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多