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