Python 识别列值,然后为每个列分配新值

Python 识别列值,然后为每个列分配新值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含城市的熊猫数据框架,还有一个单独的列表,其中包含每个城市的乘数。我想用列表中每个城市对应的乘数来更新第一个df中的taxantium 我当前的代码运行正常,但它将所有城市的乘数设置为相同,而不是更新为新的乘数。因此,基本上所有城市的税率都是相同的,但它们应该是不同的。有什么建议可以让它发挥作用吗 将熊猫作为pd导入 df=pd.DataFrame({ ‘城市’:[‘贝莱尔海滩’、‘贝莱尔海滩’、‘清水’、‘清水’], “TaxAnnualAmount”:[567247812193.3

我有一个包含城市的熊猫数据框架,还有一个单独的列表,其中包含每个城市的乘数。我想用列表中每个城市对应的乘数来更新第一个df中的
taxantium

我当前的代码运行正常,但它将所有城市的乘数设置为相同,而不是更新为新的乘数。因此,基本上所有城市的税率都是相同的,但它们应该是不同的。有什么建议可以让它发挥作用吗

将熊猫作为pd导入
df=pd.DataFrame({
‘城市’:[‘贝莱尔海滩’、‘贝莱尔海滩’、‘清水’、‘清水’],
“TaxAnnualAmount”:[567247812193.342199.14]
})
flag=True
旗帜=(df['City']='Belleair Bluffs')
如果(flag.any()==True):
df.loc['TaxAnnualAmount']=((df['CurrentPrice']/1000)*19.9818)
flag=True
旗帜=(df['City']='Belleair')
如果(flag.any()==True):
df.loc['TaxAnnualAmount']=((df['CurrentPrice']/1000)*21.1318)
flag=True
旗帜=(df['City']='Belleair Shore')
如果(flag.any()==True):
df.loc['TaxAnnualAmount']=((df['CurrentPrice']/1000)*14.4641)

根据您的评论,每当您需要使用不同的因子更新所有行(或大部分行)时,您可以使用这些值创建第二个数据框,并将其与原始数据框合并

#示例数据
df=pd.DataFrame({
‘城市’:[‘贝莱尔海滩’、‘贝莱尔海滩’、‘清水’、‘贝莱尔’],
“TaxAnnualAmount”:[567247812193.34500]
})
mults=pd.DataFrame([
[Belleair Bluffs',19.9818],
[Belleair',21.1318],
['Belleair Shore',14.4641]
],列=[“城市”,“系数])
df=df.merge(mults,on='City',how='left')
df['NewTaxAmount']=df['taxanualamount'].div(1000).mul(df['factor']))
打印(df)
输出

             City  TaxAnnualAmount   factor  NewTaxAmount
0  BELLEAIR BEACH          5672.00      NaN           NaN
1  BELLEAIR BEACH          4781.00      NaN           NaN
2      CLEARWATER          2193.34      NaN           NaN
3        Belleair           500.00  21.1318       10.5659
注意两件事:

  • how='left'
    参数告诉pandas包含主数据框中的所有行,并在不匹配的行上填充
    nan
  • 无论何时重写数据帧上的列,都必须小心,确保循环中没有这样的行(与前面的方法相同)
  • 有关合并的更多信息,请参阅cs95中的和