根据th中的其他列设置pandas列的布尔值

2024-10-01 00:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

假设一个数据帧

    C1      C2      C3
1   NaN     NaN     NaN
2   20.1    15      200
3   NaN     12      100
4   22.5    8       80

我想根据行其余部分的汇总布尔值创建一个新列。例如,是否有任何值为NaN?在这种情况下,该行的新列值将为“False”。在

或者,也许所有的值都是NaN吗?在这种情况下,我可能希望新列为False,否则为True(我们确实有一些值)

我考虑过使用df.notnan()来创建一个布尔数据帧

^{pr2}$

我确信我遗漏了一些简单的东西,但是我不能想出一种方法来基于每行中现有的项来创建第四列。在

另外,一个通用的解决方案是不错的,一个不需要建立一个布尔函数的临时DF。在

背景:我有一个数据集。营养价值只是偶尔抽样,所以很多行不包含这些值。我想有一个“营养素采样”列,其中的值是真是假,这取决于我是否可以期望在这条记录中看到任何营养素样本数据。有6种可能的营养素,我不想检查所有6列。在

我可以编写检查所有6列的代码;我只是不能用truth值创建一个新列。在


Tags: 数据falsetruedf情况nan汇总c2
3条回答

您可以使用数据帧上可用的anyall方法来实现这一点,只需传递参数axis=1来进行操作

示例:

df['C4'] = pd.notnull(df).any(axis=1)

     C1    C2     C3     C4
0   NaN   NaN    NaN  False
1  20.1  15.0  200.0   True
2   NaN  12.0  100.0   True
3  22.5   8.0   80.0   True

我觉得我们应该用all

df['New']=~df.isna().all(1)
df
     C1    C2     C3    New
1   NaN   NaN    NaN  False
2  20.1  15.0  200.0   True
3   NaN  12.0  100.0   True
4  22.5   8.0   80.0   True

怎么样:

# interim df
df = {"C1": [False, True, False, True], ...
df ["C4"] = df.apply(lambda x: x.C1 or x.C2 or X.C3, axis=1)

或者。。。直接作为

^{pr2}$

谨致问候

相关问题 更多 >