【问题标题】:Pandas conditional creation of a new dataframe column熊猫有条件地创建一个新的数据框列
【发布时间】:2016-08-30 11:46:17
【问题描述】:

这个问题是Pandas conditional creation of a series/dataframe column 的扩展。 如果我们有这个数据框:

    Col1       Col2
1    A          Z
2    B          Z           
3    B          X
4    C          Y
5    C          W

我们想做的相当于:

if Col2 in ('Z','X') then Col3 = 'J' 
else if Col2 = 'Y' then Col3 = 'K'
else Col3 = {value of Col1}

我该怎么做?

【问题讨论】:

    标签: python pandas if-statement dataframe multiple-columns


    【解决方案1】:

    您可以将locisin 和最后一个fillna 一起使用:

    df.loc[df.Col2.isin(['Z','X']), 'Col3'] = 'J'
    df.loc[df.Col2 == 'Y', 'Col3'] = 'K'
    df['Col3'] = df.Col3.fillna(df.Col1)
    print (df)
      Col1 Col2 Col3
    1    A    Z    J
    2    B    Z    J
    3    B    X    J
    4    C    Y    K
    5    C    W    C
    

    【讨论】:

    • 如果我或其他答案有帮助,请不要忘记accept。谢谢。
    【解决方案2】:

    试试这个使用 np.where :outcome = np.where(condition, true, false)

      df["Col3"] = np.where(df['Col2'].isin(['Z','X']), "J", np.where(df['Col2'].isin(['Y']), 'K', df['Col1']))
    
      Col1 Col2 Col3
    1    A    Z    J
    2    B    Z    J
    3    B    X    J
    4    C    Y    K
    5    C    W    C
    

    【讨论】:

      【解决方案3】:

      当您有多个 if 条件时,一种简单(但可能效率低下)的方法可能很有用。就像您试图根据四分位数将值放入(比如说)四个桶中。

      df 保存你的数据,col1 有值,col2 应该有分桶值 (1,2,3,4) 夸脱有 25%、50% 和 75% 的界限。 试试这个

      1. 创建一个虚拟列表为 dummy = []
      2. 遍历数据框:对于索引,df.iterrows() 中的行:
      3. 设置 if 条件,例如:if row[col1]
      4. 在 if: dummy.append(1) 下的 dummy 中附加适当的值
      5. 嵌套的 if-elif 可以处理您附加到 dummy 的所有必需的可选值。
      6. 将 dummy 添加为列:df[col2] = dummy

      你可以通过 A = df.describe() 找到四分位数,然后 print(A[col1])

      【讨论】:

        猜你喜欢
        • 2020-04-23
        相关资源
        最近更新 更多