熊猫根据另一列中的值应用基于值的值

马特

我有一个数据框

   state   country
0  tx      us
1  ab      ca
2  fl      
3          
4  qc      ca
5  dawd    

我正在尝试创建一个函数,该函数将检查列中是否有值country如果in中没有值,country则检查in中的值state是加拿大还是美国的缩写。如果是加拿大/美国的缩写,则将正确的国家/地区名称分配给该country行的列。

例如,功能上面的示例中DF将看到,在row 2country是空白的。然后,它将看到statefl是我们的一部分。然后,它将国家/地区指定为us

我在想可以做到这一点,pd.apply()但是我在执行上遇到了麻烦。

我一直在玩下面的代码,但我做错了什么...

def country_identifier(country):
    states = ["AK", "AL", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", 
              "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", 
              "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"]
    provinces = ["ON", "BC", "AB", "MB", "NB", "QC", "NL", "NT", "NS", "PE", "YT", "NU", "SK"]
    if country["country"] not None:
        if country["state"] in states:
            return "us"
        elif country["state"] in provinces:
            return "ca"
    else:
        return country

df2 = df[["country", "state"]].apply(country_identifier)
df2
罗根乔希

您不需要使用嵌套np.where条件,因为这对可以检查的条件给出了硬限制。df.loc除非您的条件列表急剧扩展,否则请使用它会比apply

import pandas as pd
import numpy as np

states = ["AK", "AL", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", 
              "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", 
              "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"]
provinces = ["ON", "BC", "AB", "MB", "NB", "QC", "NL", "NT", "NS", "PE", "YT", "NU", "SK"]

df = pd.DataFrame({'country': {0: 'us', 1: 'ca', 2: np.nan, 3: np.nan, 4: 'ca', 5: np.nan},
                   'state': {0: 'tx', 1: 'ab', 2: 'fl', 3: np.nan, 4: 'qc', 5: 'dawd'}})

df.loc[(df['country'].isnull()) 
       & (df['state'].str.upper().isin(states)), 'country'] = 'us'

df.loc[(df['country'].isnull()) 
       & (df['state'].str.upper().isin(provinces)), 'country'] = 'ca'

它是可扩展的,因为我可以使用多种方法来生成字典,然后对替换进行概括。

conditions = {'ca': provinces, 'us': states}

for country, values in conditions.items():
    df.loc[(df['country'].isnull()) 
           & (df['state'].str.upper().isin(values)), 'country'] = country

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何添加基于熊猫中另一列的值的新列

熊猫根据另一列中的值替换值

根据熊猫中另一列的值在groupby之后应用lambda函数

如何基于熊猫中另一列的频率值显示列值?

熊猫根据选择为条件的另一列中的值创建一列

熊猫基于另一列替换值条件

根据另一列值向前填充熊猫

根据熊猫中另一列的值添加列的值

根据熊猫中数据框的另一列的值添加一列

根据另一列中的相同值组合熊猫数据框列中的文本值

熊猫:根据另一列的值打印一列的值

熊猫根据另一列的值移动列数据

根据另一列熊猫的值添加新列

根据条件填充另一列(熊猫)的空值

熊猫基于另一列的dict值添加列

根据另一列的值在熊猫中创建值的串联

根据另一列中的值将值添加到熊猫数据框的一列中

熊猫,根据另一列的值减去值

熊猫将条件应用于基于另一列的列值

如何根据熊猫中另一列的下限值对一列中的值求和?

根据熊猫数据框中另一列的最后一个值填充列

有什么方法可以根据熊猫另一列中的值(列表)更改一列中的值?

熊猫根据另一列中的值导出列中的缺失值

根据另一列中的值选择列的值,然后在熊猫数据框中的每一行应用该值

使用熊猫,如何根据另一列的值分配列中的值?

根据另一列中的累积值拆分数组值 + Google 应用脚本

根据存储在另一列(熊猫)中的列索引选择列值

如何根据熊猫中另一列中的描述计算一列中的值?

如何根据熊猫中另一列中的空值填充列