如何通过更新主行中的列来合并事务数据

2024-04-26 01:21:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用事务df(df2)中多条记录的数据更新主df(df1),其中“id\u number”值在两个帧中都匹配。主列包括静态列和动态列的组合。我想逐列检测值的变化,如果发生变化,用最新的值更新主列,用价数据更新关联的主列。你知道吗

我试图将事务行打包到单个记录中,但如果没有对多个嵌入的if和循环进行旧式编码,就看不到如何做到这一点。你知道吗

    ...
    # Data patterns:
    # open master
    df_master = pd.DataFrame({'id':['100'], 'date': ['2018'], 'value':['350000'], 'value_valence':['1'], 'lat':['36.608257'], 'lon':['121.812232'], 'age':['34']})
    # open transactions
    df_transaction = pd.DataFrame({'id':['100'], 'date': ['2019'], 'value':['380000'], 'lat':['36.608257'], 'lon':['-121.812232'], 'age':['35']})

    # After update: Master = 100,2019,380000,2,36.608257,-121.812232,35

    # sort transactions in id, date order (master is in id order with unique ids and all ids in transaction are in master)
    df_transactions = df_transactions.sort_values(by = ['id','date'])
    # pseudo:
    for i in df_transactions:
        if df_master['id'] == df_transaction['id']:
            for j in df_transactions.row:
                if column(j).value != df_master.column(j):
                    # update the master column with the new value
                    df_master.column(j) = df_transactions.column(j)
                    # update the associated valence column
                    if df_master.column(j) > df_transactions.column(j): 
                        df_master.column(j+1) = df_master.column(j+1) + 1
                    else df_master.column(j+1) = df_master.column(j+1) - 1

我知道上面所说的语法是混为一谈的,而且是粗糙的,而iloc、loc、lambda和其他一些我没有完全理解的代码的组合可以更有效地实现这一点。你知道吗

任何帮助都是感激的,即使是'去做tut x'之类的。你知道吗


Tags: the数据inmasteriddfdateif
1条回答
网友
1楼 · 发布于 2024-04-26 01:21:26

希望这样能加速我的进步,但在有人插嘴之前,我想出了一个可行的答案:

将事务内部连接到主服务器可以实现矢量化转换。这将生成包含两个文件中的列的行,为每个事务行重复主数据。列名在主列名后面加上了x,在事务列名后面加上了y。你知道吗

...
dfmerge = pd.merge(df_master, df_transactions, on='id', how='inner')

dfmerge.loc[(dfmerge.value_x != dfmerge.value_y), 'value'] = dfmerge.value_y 
dfmerge.loc[(dfmerge.value_x == dfmerge.value_y), 'value'] = dfmerge.value_x 
...

我只是对每个列重复上面的第二行,更改逻辑以适应所需的转换。你知道吗

相关问题 更多 >