【问题标题】:Creating new columns based on value of other column根据其他列的值创建新列
【发布时间】:2023-03-17 07:10:02
【问题描述】:

在我的df 中,我为下面的每个实体(Grubhub、Toasttab、Tenk)都有一列,它在每一行的该列的值中表示是或否,

我有以下代码,例如:

df['Grubhub'] = df[['On GrubHub or Seamless?']].apply(lambda x: any(x == 'Yes'), axis = 1)

df['ToastTab'] = df[['On ToastTab?']].apply(lambda x: any(x == 'Yes'), axis = 1)

df['Tenk'] = df[['On Tenk?']].apply(lambda x: any(x == 'Yes'), axis = 1)

df['Udemy'] = df[['On Udmey?']].apply(lambda x: any(x == 'Yes'), axis = 1)

df['Postmates'] = df[['On Postmates?']].apply(lambda x: any(x == 'Yes'), axis = 1)

df['Doordash'] = df[['On DoorDash?']].apply(lambda x: any(x == 'Yes'), axis = 1)

df['Google'] = df[['On Goole?']].apply(lambda x: any(x == 'Yes'), axis = 1)

这为每个实体(Grubhub、Toasttab、Tenk)提供了一个新列,并且该列给出了真值或假值,是否有更有效的方法可以在一行代码或函数中完成所有这些操作?提前感谢您的帮助

【问题讨论】:

    标签: python python-3.x pandas data-science


    【解决方案1】:

    您可以创建一个列映射并在loop 内应用function

    columns_map = (
        ('Grubhub', 'On GrubHub or Seamless?'),
        ('ToastTab', 'On ToastTab?'),
        ('Tenk', 'On Tenk?'),
        # etc ...
    )
    
    for new_col, alias in columns_map:
        df[new_col] = df[alias].apply(lambda x: x == 'Yes')
        # also you can easily remove aliases columns:
        # df = df.drop(columns=[alias])
    

    或者您可以将值设置为原始列并根据需要重命名(不带drop()):

    for new_col, alias in columns_map:
        df[alias] = df[alias].apply(lambda x: x == 'Yes')
    
    df.rename(
        columns={alias: new_col for new_col, alias in columns_map},
        inplace=True
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 2021-10-03
      • 2022-07-05
      • 1970-01-01
      • 2020-08-18
      相关资源
      最近更新 更多