gpt4 book ai didi

Python pandas 标记将一个数据帧中的列中的值与另一个数据帧中的列进行匹配

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:30 28 4
gpt4 key购买 nike

我刚刚在 stackoverflow 上花了一个小时寻找类似的问题,所以如果以前有人问过这个问题但我没有找到它,请原谅。

我有以下数据框 df:

  Id | Category | Subcategory | Count | Flag | Phone_number
1 A aa 4534 Y 222-444-3333
2 B bb 4807 Y 3335557777
3 C cc 8978 222-444-3333
4 D dd 9874 333-555-7777
5 E ee 3187 555-666-8888
6 F ff 8573 5556668888

“标志”栏表示已建立的错误记录。现在我需要标记/突出显示具有相同电话号码的所有记录,即使它们没有标记。

首先,我需要删除电话号码中的所有“-”,因为它是由用户输入的。

df['Phone_number'] = df['Phone_number'].str.replace('-', '')

(不确定这是最好的方法)

接下来,我想不出更好的方法来处理它,然后创建一个带有 Y 标志和不带有 Y 标志的新记录 df 。

new_df = df.loc[df['Flag'] == 'Y']
df_withoutY = df.loc[df['Flag'] != 'Y']

但现在我陷入困境了。如何比较/匹配 df_withoutY 中的电话号码,如果 new_df 中确实存在该电话号码,请添加一个新列“不正确”=“Y”。

我正在考虑类似的事情,但全都错了。

df_withoutY['Phone_number'].isin(new_df['Phone_number'])

这根本不起作用:

df_withoutY['incorrect'] = np.where((df_withoutY['Phone_number'].isin(new_df['Phone_number'])) == True, "Y" " ")

TypeError: invalid type comparison

不确定这是否有帮助,但在 Excel 中,我会通过 Flag 将两者分成两个单独的选项卡,然后使用 Match 函数。

=MATCH(df_withoutY!AK2,new_df!AK$2:AK$3395,0)

一旦我这样做了,我计划将两个 dfs 重新合并在一起,但现在新列“不正确”。如果有一种不分割数据帧的方法那就更好了。

这是最终目标 df:

  Id | Category | Subcategory | Count | Flag | Phone_number | incorrect
1 A aa 4534 Y 222-444-3333
2 B bb 4807 Y 3335557777
3 C cc 8978 222-444-3333 Y
4 D dd 9874 333-555-7777 Y
5 E ee 3187 555-666-8888
6 F ff 8573 5556668888

谢谢

最佳答案

试试这个:

In [219]: phones_normalized = df.Phone_number.str.replace('-','')

In [220]: df['incorrect'] = \
...: np.where(phones_normalized.isin(df.loc[df.Flag=='Y', 'Phone_number'].str.replace('-',''))
...: & (df.Flag!='Y'),
...: 'Y',
...: '')
...:

In [221]: df
Out[221]:
Id Category Subcategory Count Flag Phone_number incorrect
0 1 A aa 4534 Y 222-444-3333
1 2 B bb 4807 Y 3335557777
2 3 C cc 8978 222-444-3333 Y
3 4 D dd 9874 333-555-7777 Y
4 5 E ee 3187 555-666-8888

或者,您可以“重用”您的 Flag 列:

In [226]: df.loc[df.Phone_number.str.replace('\D+','').isin(df.loc[df.Flag=='Y', 'Phone_number'].str.replace('\D+','')), 'Flag'] = 'Y'

In [227]: df
Out[227]:
Id Category Subcategory Count Flag Phone_number
0 1 A aa 4534 Y 222-444-3333
1 2 B bb 4807 Y 3335557777
2 3 C cc 8978 Y 222-444-3333
3 4 D dd 9874 Y 333-555-7777
4 5 E ee 3187 555-666-8888

关于Python pandas 标记将一个数据帧中的列中的值与另一个数据帧中的列进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43194341/

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