比较pandas中不同大小的数据帧,并基于比较创建新列

2024-10-03 21:31:35 发布

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

我通过pyodbc 2数据帧导入:df1和df2

它们很大,我需要比较一下

PS:它们的大小不一样。

3列大小的数据帧:

Sizes and format of dataframes

我想做什么:

如果CODUSU列相等,则df2[Situação]=“K”

我做了什么,但太慢了:

for i in range(0,len(df2)):
  for k in range(0,len(df1)):
    if df2.loc[i][0] == df1.loc[k][0]:
        df2[i]["Situação"] = "K"

我还需要:

如果在df1[CODUSU]的项目中,而不是在df2[CODUSU]中,则df2[Situação]=“Q”

如果在df2[CODUSU]的项目中,而不是在df1[CODUSU]中,则df2[Situação]=“B”


Tags: 数据项目inforlenifrangeloc
1条回答
网友
1楼 · 发布于 2024-10-03 21:31:35

您应该在数据帧上执行外部合并,以请求指示符变量:

resul = df2.merge(df1, how='outer', on='A', suffixes=('', '_y'),indicator=True)

不要忘记仅来自df1的行的DTDOSE列:

resul.loc[resul['indicator'] == 'right_only', 'DTDOSE'] = resul.loc[
                                  resul['indicator'] == 'right_only', 'DTDOSE_y']

Situação列计算新值的时间:

resul.loc[resul['indicator'] == 'both', 'Situação'] = 'K'
resul.loc[resul['indicator'] == 'right_only', 'Situação'] = 'Q'
resul.loc[resul['indicator'] == 'left_only', 'Situação'] = 'B'

最后去掉辅助柱:

resul = resul[['CODUSU', 'DTDOSE', 'Situação']

相关问题 更多 >