使用pandas apply()根据条件创建新列

时间:2018-07-21 21:36:58

标签: python pandas dataframe

我有一个看起来像这样的pandas DataFrame:

  Col1   Col2
0    A  code1
1    B  code1
2    C  code2
3    A  code1

我想在第2列中为每个唯一代码值向DataFrame添加一列,并在与代码值匹配的列中放入1,在所有其他新创建的列中放入0。换句话说,我想要一个看起来像这样的DataFrame:

  Col1   Col2  Code1  Code2
0    A  code1      1      0
1    B  code1      1      0
2    C  code2      0      1
3    A  code1      1      0

以下代码适用于此小数据样本:

def assign_code1(row):
    if row['Col2'] == 'code1' : return 1
    else :return 0

def assign_code2(row):
    if row['Col2'] == 'code2' : return 1
    else :return 0    

df['Code1'] = df.apply(assign_code1 ,axis=1)
df['Code2'] = df.apply(assign_code2 ,axis=1)

但是,我真的很讨厌这段代码,因为:

  • 我必须知道Col2中的所有值;
  • 我必须为Col2中的每个唯一值编写一个单独的函数;和
  • 我在其他帖子中读到,使用apply()创建新列的做法被人皱眉了(尽管我不完全理解为什么-我只和熊猫一起工作了几周)。

我希望有一些代码可以获取Col2中所有唯一值的列表,为每个值创建一列,并正确填充这些列中的所有1和0。有没有一种优雅的方法可以做到这一点?

0 个答案:

没有答案