gpt4 book ai didi

python - Pandas 强制对包含重复键的列进行一对一合并

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:31 25 4
gpt4 key购买 nike

我有两个Dataframes, df1:

| ID        | Invoice   |
-------------------------
| X\191 | 4 |
| R\192 | 4 |
| 733 | 1 |
| X215 | 3 |
| BL000002 | 3 |

df2:

| ID        | Invoice   |
-------------------------
| X191 | 4 |
| X215 | 3 |
| BL000002 | 3 |

我应该将它们一对一合并以获得:

| ID        | Invoice   | ID        |
-------------------------------------
| X\191 | 4 | X191 |
| X\192 | 4 | |
| 733 | 1 | |
| X215 | 3 | X215 |
| BL000002 | 3 | BL000002 |

但是当我进行外部合并时,我会得到重复的值

import pandas as pd
dict1 = {"ID": ["X\\191","R\\192","733","X215","BL000002"], "Inv": [4,4,1,3,3]}
df1 = pd.DataFrame.from_dict(dict1)

dict2 = {"ID": ["X191","X215","BL000002"], "Inv": [4,3,3]}
df2 = pd.DataFrame.from_dict(dict2)

some_df = pd.merge(df1, df2, on = 'Inv', how='outer')

输出如下:

    ID_x    Inv    ID_y
X\191 4 X191
X\192 4 X191
733 1 NaN
X215 3 X215
X215 3 BL000002
BL000002 3 X215
BL000002 3 BL000002

我如何合并才能使其一对一连接而不是混合搭配。

我不能在合并中使用任何其他列,因为它们在实际数据中会有所不同。

编辑和解释对不起。我还不够清楚。列 ID 不一致。我也不能保证它是否总是一个子字符串。但发票金额必须相同。这是人类在一年多的时间内输入的,大约有 15K 行。我需要对它们进行排序,使具有相同 Invoice 值的那些彼此相邻,这样当其中一个数据框(最初是 Excel 工作表)中缺少某些内容时更容易手动验证

最佳答案

我认为简单的列表查找就可以解决问题:

df1['new_id'] = df1.apply(lambda row: row['ID'] if row['ID'] in df2['ID'].tolist() else "", axis=1)

ID Invoice new_id
0 X191 4 X191
1 X192 4
2 X212 1
3 X215 3 X215
4 X319 3 X319

找到要删除的内容后,您可以执行以下操作(我假设 ID 有 \.、'@'):

df['ID'] = df['ID'].str.replace(r'\\|\.|@', '')

关于python - Pandas 强制对包含重复键的列进行一对一合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53912388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com