Python 为分析整个列的应用程序编写函数?

Python 为分析整个列的应用程序编写函数?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个dataframe(它是使用pivot函数的产物,这就是为什么它有c和a): 我想在这个数据框的底部添加一个新行。新行中的每个单元格将计算其上方的列;如果该列包含数字9、8或3,则该单元格的计算结果将为“TRUE”。如果列不包含这些数字,则单元格的计算结果将为“FALSE”。最终,我的目标是使用drop函数删除带有“FALSE”单元格的列,创建如下数据集: c 367235 419895 a 1999-02-06 Nan 9 2000-04-03 2 Nan 1999-04

我有一个dataframe(它是使用pivot函数的产物,这就是为什么它有c和a):

我想在这个数据框的底部添加一个新行。新行中的每个单元格将计算其上方的列;如果该列包含数字9、8或3,则该单元格的计算结果将为“TRUE”。如果列不包含这些数字,则单元格的计算结果将为“FALSE”。最终,我的目标是使用drop函数删除带有“FALSE”单元格的列,创建如下数据集:

c 367235    419895
a
1999-02-06  Nan 9
2000-04-03  2   Nan
1999-04-12  Nan Nan
1999-08-08  2   Nan 
1999-11-01  8   5
1999-12-08  Nan 3
1999-08-17  Nan Nan
1999-10-22  Nan 3   
1999-03-23  Nan 4
2000-09-29  9   Nan
1999-04-30  Nan Nan
2000-09-30  9   Nan
           TRUE TRUE
我的问题是:

我可以编写一个函数来计算列表中是否有几个数字之一,但我无法将此函数写入.apply

也就是说,我发现这可以用来确定一组数字是否在列表中:

我尝试对应用函数进行如下修改:

def BIS(i):
        L1 = [9,8,3]
        if i in L1:
            return "TRUE"
    else:
        return "FALSE"
df_wanted.apply(BIS, axis = 0)
这将导致一个错误: (‘序列的真值不明确。请使用a.empty、a.bool()、a.item、a.any().‘u’出现在索引367235’)

这使我认为,尽管.apply将整个列作为输入,但它无法聚合所有单个单元格的真值,并得出该列的总真值。我查了a.any和a.bool,它们看起来很有用,但我不知道把它们放在哪里?例如,这不起作用:

df_wanted.apply.any(BIS, axis = 0)
这一点也没有

df_wanted.apply(BIS.any, axis = 0).

谁能给我指出正确的方向吗?非常感谢

您可以使用
.isin()
方法:

df.loc[:, df.isin(['9','8','3']).any()]

如果需要将条件附加到数据帧:

cond = df.isin(['9','8','3']).any().rename("cond")
df.append(cond).loc[:, cond]

完成的数据集看起来很漂亮-正是我想要的。逻辑似乎也是正确的,但我对python仍然一无所知,无法重新创建结果。当我输入您的代码时,我得到:“空数据框列:[]索引:[1999-02-06 00:00:00,…[长的日期列表]。知道我错过了什么步骤吗?在原始数据框中,数据类型可能是数字的。尝试用
[9','8','3']
替换
[9,8,3]
cond = df.isin(['9','8','3']).any().rename("cond")
df.append(cond).loc[:, cond]