Python如何在数据框中应用.replace以更改大量值

标签 python regex pandas numpy

我怎样才能更有效地执行下面的任务?

我有两个数据框; df1 有我的原始数据,df2 有需要在 df1 中更新的 key 。

问题是大约有 2000 个名称需要更改。

cw=

    id      adgroup      cost  
    1001    GoogleMaps   101,1
    1002    Google       101,1
    1003    AppStore     101,1
    1004    GoogleDocs   101,1


reff_table=

    adgroup       new_adgroup       
    GoogleMaps    G_maps
    Google        GG
    AppStore      APG
    GoogleDocs    DOC

我是这样做的:

m1 = cw.loc[cw['adgroup']=='GoogleMaps'].replace({'GoogleMaps' :'G_maps'})
m2 = cw.loc[cw['adgroup']=='GoogleMaps'].replace({'Google' :'GG'})

final_cw = pd.concat([m1, m2)]

手动执行此操作是一个漫长的过程,我需要找到更有效的方法来完成它。

最佳答案

你可以只使用合并/连接

您的原始数据框:

print(df1)

     id     adgroup  cost
0  1001  GoogleMaps   101
1  1002  GoogleMaps   101
2  1003      Google   101
3  1004    AppStore   101
4  1005    AppStore   101
5  1006  GoogleDocs   101

包含引用的数据框:

print(df2)

      adgroup new_adgroup
0  GoogleMaps      G_Maps
1      Google          GG
2    AppStore         APG
3  GoogleDocs         DOC

adgroup 上合并它们会将引用值与原始数据中的正确行对齐(然后您可以根据需要删除/重命名/重新排序列):

df1.merge(df2, on='adgroup').drop(columns=['adgroup']).rename(columns={'new_adgroup':'adgroup'})

     id  cost adgroup
0  1001   101  G_Maps
1  1002   101  G_Maps
2  1003   101      GG
3  1004   101     APG
4  1005   101     APG
5  1006   101     DOC

加入方法

假设您的原始数据框和引用数据框不是完美匹配 - 您如何处理额外/缺失的行?

有多种连接方法可供您使用:leftrightouterinner

Pandas documentation对这些有一个简短的解释,但是假设您的引用数据框缺少 AppStoreadgroup 代码(如果您的原始数据框也缺少某些东西,同样的想法也适用)并且看起来像这样:

      adgroup new_adgroup
0  GoogleMaps      G_Maps
1      Google          GG
2  GoogleDocs         DOC

原始数据中的 AppStore 行发生了什么变化?好吧,你可以控制...

如果您想确定原始数据的优先级并确保保留这些行,您可以使用 left 联接,并且您将简单地为缺失的数据提供 NA 值代码:

df1.merge(df2, on='adgroup', how='left')

     id  cost adgroup
0  1001   101  G_Maps
1  1002   101  G_Maps
2  1003   101      GG
3  1004   101     NaN
4  1005   101     NaN
5  1006   101     DOC

相反,如果您想确定引用数据框的优先级,以便只有在引用中找到的代码才会出现在您的输出中,您可以使用 right 连接。请注意,由于 AppStore 不在您的引用数据框中,因此原始数据中的 AppStore 行已被删除:

df1.merge(df2, on='adgroup', how='right')

     id  cost adgroup
0  1001   101  G_Maps
1  1002   101  G_Maps
2  1003   101      GG
3  1006   101     DOC

关于Python如何在数据框中应用.replace以更改大量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566550/

相关文章:

python - 为 3D numpy 数组中的每个元素传递多个条件的更有效方法

sql - 在 Hive 中寻找在列中具有特殊字符的行

python - 来自具有非唯一数据的 Pandas 数组的多索引

python - 将包含 2 个值的列拆分为 pandas df 中的不同列

python - 在两个不同的 pandas 数据帧之间搜索和替换值

Python数组id值

Python 从输入构建字典的最佳方式

python - 分组可变长度元组的高效算法

regex - awk 单个正则表达式中的小数和整数检查

java - 将 select 子句和 insert 子句与 sql 字符串分开