在我的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 )提供了一个新列,并且该列给出了一个假值,是否有一种更有效的方法,可以在一行代码或函数中完成所有这些操作?谢谢你提前帮忙
发布于 2020-09-03 19:09:12
您可以创建列映射并在function中应用loop。
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
)https://stackoverflow.com/questions/63710436
复制相似问题