【发布时间】:2021-10-25 22:08:47
【问题描述】:
我必须检查行中的布尔值,获取列的名称以构建列表并使用此字符串列表创建新列。
我有这段代码,它运行良好,但速度很慢(我使用了 125 000 行 20 列)。您有优化此代码的想法吗?
import pandas as pd
def exlusions(x: pd.Series) -> pd.Series:
reasons = [name for name in x.index if x[name] == True]
return ",".join(reasons)
dct_data = {
'A' : [False, False, True, False, True, False],
'B' : [False, False, False,False, False, False],
'C' : [False, True, False,False, False, False],
'D' : [False, False, True, False, False, False],
'Client' : ['Paul', 'Nick', 'Josh', 'Flo', 'Julia', 'Lucia']
}
df = pd.DataFrame(dct_data)
df = df[list(df.select_dtypes(include='bool').columns) + ['Client']]
df = df[df[list(df.select_dtypes(include='bool').columns)].any(1)]
df['Exclusions'] = df.apply(lambda x: exlusions(x), axis=1)
df
【问题讨论】:
标签: python pandas lambda apply