【问题标题】:How to assign new column based on the list of string values in pandas如何根据熊猫中的字符串值列表分配新列
【发布时间】:2022-09-23 21:33:44
【问题描述】:

我有一个数据框,其中一列包含字符串值,如果此列值在我指定的列表中,我想分配新列。

my_list = [\'AA\', \'TR\', \'NZ\']

例如: 我的数据框:df

country
AA
TR
SG

我想要的数据框:

country flag
AA 1
TR 1
SG 0

我试过这个,但我有一个值错误。

df.assign(flag = lambda df: \'1\' if df[\'country\'].isin(my_list) else \'0\')

我应该怎么办?谢谢

    标签: python pandas feature-engineering


    【解决方案1】:

    您可以使用astype(int) 直接将布尔值转换为 0/1:

    df.assign(flag= df['country'].isin(my_list).astype(int))
    

    或者对于一个字符串:

    df.assign(flag= df['country'].isin(my_list).astype(int).astype(str))
    

    或者,使用numpy.where

    import numpy as np
    df.assign(flag=np.where(df['country'].isin(my_list), '1', '0'))
    

    输出:

      country flag
    0      AA    1
    1      TR    1
    2      SG    0
    

    【讨论】:

      【解决方案2】:
      import pandas as pd
      
      my_list = ['AA', 'TR', 'NZ']
      df = pd.DataFrame(columns=["Country", "Flag"])
      
      df.loc[0] = ["AA", 0]
      df.loc[1] = ["TR", 0]
      df.loc[2] = ["SG", 0]
      
      print(df)
      
      for i in range(len(df)):
          if df["Country"].iloc[i] in my_list:
              df["Flag"].iloc[i] = 1
      
      print(df)
      

      【讨论】:

      • 您几乎不必使用 pandas 循环,这是一种反模式!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2020-12-11
      • 1970-01-01
      • 2019-05-17
      • 2021-06-05
      • 1970-01-01
      • 2019-04-23
      相关资源
      最近更新 更多