从一个数据帧的单元格快速复制值到另一个数据帧的最快方法,如果第三个单元格匹配

2024-09-29 06:26:04 发布

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

我有一个主数据帧,包含750到3000行数据。你知道吗

我有一个每日订购的数据帧,包含3000到5000行数据。你知道吗

如果在主数据框中找到了每日订单数据框的产品代码,我就得到了项目成本。否则,它将被标记为无效并被删除。你知道吗

我现在是通过2个for循环来完成的。但我必须做更多这样的比较和数据更新(要比较的其他字段,要复制的其他值) 最有效的方法是什么?你知道吗

我无法使我正在比较的列成为主数据帧的索引列。 在这种情况下,产品代码在主代码中可能是唯一的,我可以进行合并,但在其他情况下,我可能需要比较其他值,例如供应商城市,这些值可能不是唯一的。你知道吗

我似乎在我所有的Python代码中都反复这样做,我想学习最有效的方法。你知道吗

Order DF:
[![Order csv from which the Order DF is created][1]][1]
Master DF
[![Master csv from which Master DF is created][1]][1]
def fillVol(orderDF,mstrDF,paramC,paramF,notFound):

    orderDF['ttlVol']=0
    for i in range(len(orderDF)):
        found=False
        for row in mstrDF.itertuples():
            if (orderDF.loc[i,paramC]==getattr(row,paramC)):
                orderDF.loc[i,paramF[0]]=getattr(row,paramF[0])#mtrl cbf
                found=True
                break
        if (found==False):
            notFound.append(inv.loc[i,paramC])

    inv['ttlVol']=inv[paramF[0]]*inv[paramF[2]]
    return notFound

我将传递我正在比较的列名和用数据填充的列名,因为csv的命名有一些细微的变化。在我共享的数据中,材料体积是CBF,有时是CBM

数据列不能被索引,因为在任何列中都没有唯一的数据,总是值的组合使它们唯一。你知道吗

在本例中,数据是一个float,可以使用numpy,但在其他情况下(如从主控形状复制城市名称),数据是一个字符串。numpy是给其他有类似问题的人的建议


Tags: csv数据代码masterdffor情况order
1条回答
网友
1楼 · 发布于 2024-09-29 06:26:04

我不知道这是不是最有效的方法-作为一个刚开始用Fortran和C编程的人,我总是支持基本数据类型,而这个解决方案没有使用基本数据类型。这绝对是一个非常好的解决方案。你知道吗

orderDF=orderDF[orderDF[ParamF].isin(mstrDF[ParamF])]
orderDF=orderDF.reset_index(drop=True)

我在orderDF和msterDF数据帧上使用左合并来复制所有相关值

orderDF=orderDF.merge(mstrDF.drop_duplicates(paramC,keep='last')[[paramF[0]]]', how='left',validate = 'm:1')

相关问题 更多 >