【问题标题】:create a column value if the column value is in the list- python pandas如果列值在列表中,则创建列值-python pandas
【发布时间】:2021-04-12 21:42:39
【问题描述】:

我想创建一个名为Playercategory的新列,

Name    Country
Kobe    United States
John    Italy
Charly  Japan
Braven  Japan / United States 
Rocky   Germany / United States
Bran    Lithuania
Nick    United States / Ukraine
Jonas   Nigeria

如果玩家的国籍是“美国”或美国与除欧洲国家以外的任何其他国家/地区,则 Playercategory=="American"

如果玩家的国籍是欧洲国家或任何其他国家的欧洲国家,则 Playercategory=="Europe"(例如:'Italy'、'Italy / United States'、'Germany / United国家”、“立陶宛/澳大利亚”、“比利时”)

对于所有其他玩家,然后 Playercategory=="Non"

预期输出:

Name    Country                   Playercategory
Kobe    United States             American
John    Italy                     Europe
Charles Japan                     Non
Braven  Japan / United States     American
Rocky   Germany / United States   Europe
Bran    Lithuania                 Europe
Nick    United States / Ukraine   American
Jonas   Nigeria                   Non             

我尝试了什么: 首先,我创建了一个包含欧洲国家/地区的列表:

euroCountries=['Austria', 'Belgium', 'Bulgaria', 'Croatia', 'Cyprus', 'Czechia', 'Denmark',
   'Estonia', 'Finland', 'France', 'Germany', 'Greece', 'Hungary', 'Ireland',
   'Italy', 'Latvia', 'Lithuania', 'Luxembourg', 'Malta', 'Netherlands',
   'Poland', 'Portugal', 'Romania', 'Slovakia', 'Slovenia', 'Spain', 'Sweden']

我知道如何检查一个条件,如下所示,

df["PlayerCatagory"] = np.where(df["Country"].isin(euroCountries), "Europe", "Non")

但是不知道如何拼接以上三个条件,正确创建PlayerCategory。

非常感谢您的支持!!!!!!!

【问题讨论】:

    标签: python pandas list dataframe numpy


    【解决方案1】:

    如果在Series.str.contains 中匹配euroCountries,则使用numpy.select 先测试,然后测试是否匹配United States

    m1 = df['Country'].str.contains('|'.join(euroCountries))
    m2 = df['Country'].str.contains('United States')
    

    或者您可以使用Series.str.splitDataFrame.eqDataFrame.isin 测试拆分值,然后如果每行至少有一个匹配项DataFrame.any

    df1 = df['Country'].str.split(' / ', expand=True)
    m1 = df1.eq('United States').any(axis=1)
    m2 = df1.isin(euroCountries).any(axis=1)
    

    df["PlayerCatagory"] = np.select([m1, m2], ['Europe','American'], default='Non')
    print (df)
         Name                  Country PlayerCatagory
    0    Kobe            United States       American
    1    John                    Italy         Europe
    2  Charly                    Japan            Non
    3  Braven    Japan / United States       American
    4   Rocky  Germany / United States         Europe
    5    Bran                Lithuania         Europe
    6    Nick  United States / Ukraine       American
    7   Jonas                  Nigeria            Non
    

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 2017-12-24
      • 2019-01-12
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多