我有一个pandas数据框架如下;
| 唯一ID|值_1|数值2|数值3|
| --------------|--------------|--------------|--------------|
| 一一一|10个|五十|十八岁|
| 二百二十二|五|八|第二章|
| 三百三十三|十二岁|三|五|
如果从Value_1
到Value_3
的列中至少有一列大于10,我希望在pandas数据框中创建一个新列,并创建一个标记(1)。
所需的输出如下;
| 唯一ID|值_1|数值2|数值3|列标签|
| --------------|--------------|--------------|--------------|--------------|
| 一一一|10个|五十|十八岁|1|
| 二百二十二|五|八|第二章|0|
| 三百三十三|十二岁|三|五|1|
我尝试了以下代码,结果出现错误:
def flag_df_new(df):
if (df[df.columns[2:]]>10).any(axis=1):
return 1
else:
return 0
customer_summary_1['Flag'] = customer_summary_1.apply(flag_df_new, axis = 1)
我得到的结果是:
AttributeError: 'Series' object has no attribute 'columns'
3条答案
按热度按时间6tdlim6h1#
可以在每列上使用布尔表达式:
如果你想在任意数量的列上这样做,这可以工作
df['tag'] = (df[df.columns[1:]] > 10).any(axis=1)
crcmnpdw2#
过滤
Value*
列以检查它们是否符合所需条件:toiithl63#
你可以这样尝试:
错误的原因是,当您将函数传递给
.apply
时,它不是以DataFrame作为参数调用的,而是在它的每一列[或它的每一行,如果您如上所述指定axis='columns'
(或像您这样指定axis=1
)]上调用。