gpt4 book ai didi

python - 为 .apply 编写函数来分析整个列?

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:21 26 4
gpt4 key购买 nike

我有一个数据框(它是使用pivot函数的产物,这就是它有c和a的原因):

c 367235    419895  992194
a
1999-02-06 Nan 9 Nan
2000-04-03 2 Nan Nan
1999-04-12 Nan Nan 4
1999-08-08 2 Nan Nan
1999-11-01 8 5 1
1999-12-08 Nan 3 Nan
1999-08-17 Nan Nan 10
1999-10-22 Nan 3 Nan
1999-03-23 Nan 4 Nan
2000-09-29 9 Nan Nan
1999-04-30 Nan Nan 1
2000-09-30 9 Nan Nan

我想在此数据框的底部添加一个新行。新行中的每个单元格都会评估其上方的列;如果该列包含数字 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。

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

How to check if one of the following items is in a list?

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

def BIS(i):
L1 = [9,8,3]
if i in L1:
return "TRUE"
else:
return "FALSE"
df_wanted.apply(BIS, axis = 0)

这会导致错误: ('Series 的真值不明确。使用 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()]

enter image description here

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

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

enter image description here

关于python - 为 .apply 编写函数来分析整个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41170675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com