gpt4 book ai didi

Python 数据框;使用多个过滤器更改列值时遇到问题

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

我有一个从 ODBC 数据库中取出的大型数据框。 Dataframe 有多个列;我试图通过过滤另外两列来更改一列的值。首先,我用这两个条件过滤我的数据帧 data_prem ,这给了我正确的行:

data_prem[(data_prem['PRODUCT_NAME']=='ŽZ08') & (data_prem['BENEFIT'].str.contains('19.08.16'))]

然后我在选择上使用替换功能将“M”值更改为“H”值:

data_prem[(data_prem['PRODUCT_NAME']=='ŽZ08') & (data_prem['BENEFIT'].str.contains('19.08.16'))]['Reinsurer'].replace(to_replace='M',value='H',inplace=True,regex=True)

Python 警告我,我正在尝试修改数据帧的副本,即使我明确引用了原始数据帧(我发布图像,以便您可以看到我的结果)。

dataframe filtering

我还尝试按以下方式使用 .loc 函数:

data_prem.loc[((data_prem['PRODUCT_NAME']=='ŽZ08') & (data_prem['BENEFIT'].str.contains('19.08.16'))),'Reinsurer'] = 'H'

它更改了符合第二个条件(str.contains...)的所有行,但它没有应用第一个条件。我还在“再保险公司”列中替换了其他“PRODUCT_NAME”值。

有一段时间我一直在网上寻找这个问题的答案。我看到一些提到 pandas 库中的错误,不确定这是否是他们所说的。

我会重视您可能提出的任何意见,也会对解决此问题的其他方法感兴趣。我使用 map 函数填充“再保险公司”列,并以“PRODUCT_NAME”作为输入(有一个字典将所有“PRODUCT_NAME”值与“再保险公司”值连接起来)。

最佳答案

根据您的 bool 掩码,您已经演示了应用chained indexing的两种方法。 。这就是警告的原因,也是您没有看到逻辑按照预期应用的原因。

mask = (data_prem['PRODUCT_NAME']=='ŽZ08') & df['BENEFIT'].str.contains('19.08.16')

链式索引:示例#1

df[mask]['Reinsurer'].replace(to_replace='M', value='H', inplace=True, regex=True)

链式索引:示例#2

df[mask].loc[mask, 'Reinsurer'] = 'H'

避免链式索引

您可以通过应用一次 mask 并使用单个 loc 调用来使事情变得简单:

df.loc[mask, 'Reinsurer'] = 'H'

关于Python 数据框;使用多个过滤器更改列值时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53703043/

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