当前位置: 首页 > 知识库问答 >
问题:

如果列值在列表中,则创建列值-python熊猫

车辰龙
2023-03-14

我想创建一个名为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==“美国”

如果玩家的国籍是欧洲国家或与任何其他国家的欧洲国家,则Playerclass=="欧洲"(例如:"意大利"、"意大利/美国"、"德国/美国"、"立陶宛/澳大利亚"、"比利时")

对于所有其他玩家,则Playercategory==“非”

预期输出:

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")

但不知道如何结合上述三个条件,正确创建玩家类别。

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

共有1个答案

陶泳
2023-03-14

使用numpy。如果在系列中匹配欧洲国家,则选择先测试。str.包含,然后测试是否匹配美国

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

或者您可以使用系列测试拆分的值。str.split数据帧。eq数据帧。isin然后,如果数据帧中每行至少有一个匹配项。任何

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
 类似资料:
  • 基于dataframe列val_1值,查看其他列col_0-10标签前缀,然后创建另一列Mycl。 数据帧看起来像: 应用逻辑后所需的数据帧: 我是trid,但这不起作用:df['mycol']=df['col'df['val_1']。aType(str)] DDL生成DataFrame: 谢谢!

  • 问题内容: 所以,这是我的数据框 我还有另一个清单: 如果x.Country位于欧洲,我想创建一个新列“ Continent” 问题答案: 或者您可以直接 使用

  • 问题内容: 我有一个: 我可以过滤库存编号‘600809’如下的行: 我想将一些股票的所有行汇总在一起,例如[‘600809’,‘600141’,‘600329’]。这意味着我想要这样的语法: 由于大熊猫不接受上述命令,如何实现目标? 问题答案: 使用isin方法。 。

  • 问题内容: 我已经看到了将一个列/系列分解为Pandas数据框的多个列的主题的几种变体,但是我一直在尝试做点事情,而实际上并没有成功地使用现有方法。 给定这样的一个DataFrame: 我想将系列中的项目转换为以值作为值的列,如下所示: 我觉得这应该是相对简单的事情,但是由于卷积水平的提高,我已经为此花了几个小时不停地努力,但没有成功。 问题答案: 有几种方法: 使用: 使用: 使用后跟:

  • 我有一个Python pandas DataFrame: 我想把一些股票的所有行放在一起,比如。这意味着我想要这样的语法: 既然熊猫不接受上述命令,如何达到目标?

  • 问题内容: 我有看起来像的数据框: 为了进一步处理数据,我需要拆分该列,然后将其替换为如下所示的多列: 因此,这些列可以追加到初始数据帧。我不知道该怎么做,因为像 不能解决我的问题,因为我不仅需要基于列表中位置的列,还需要基于列表中每个唯一值的列。您知道我该如何处理吗? 问题答案: 您可以使用和: 如果需要计数值,则可以使用(我添加一个字符串进行测试):