【问题标题】:assign value to dataframe in the first line meeting a condition为满足条件的第一行中的数据框赋值
【发布时间】:2020-10-12 17:48:18
【问题描述】:

我有一个 pandas 数据框,我想添加一列并根据某些条件设置某些值。

初始化

看我下面的例子:

import numpy as np
import pandas as pd

df=pd.DataFrame(np.reshape(np.arange(20),(5,4)).tolist(),columns=list('ABCD'))
df['E']=''
df.loc[0,'E']=1
df

直到这里,一切都如愿以偿。输出:

    A   B   C   D  E
0   0   1   2   3  1
1   4   5   6   7   
2   8   9  10  11   
3  12  13  14  15   
4  16  17  18  19   

问题

但是现在,我想将'B'值大于8的第一行中'E'列的值设置为3(与df.loc[2,'E']=1相同,但使用该条件。我不'不知道它是先验的哪一行)。

解决方案尝试

我尝试了不同的方法:

df.loc[df['B']>8,'E'].iloc[0]=3
df

这不会改变任何值:

    A   B   C   D  E
0   0   1   2   3  1
1   4   5   6   7   
2   8   9  10  11   
3  12  13  14  15   
4  16  17  18  19   

同样适用

df.loc[df['B']>8]['E'].iloc[0]=3

我尝试过的其他事情会导致错误。 df.loc[df['B']>8,'E']=3 效果很好,但我只想在满足条件的第一行中分配值,而不是在所有行中。

那么我该如何实现呢?

【问题讨论】:

    标签: python pandas dataframe indexing variable-assignment


    【解决方案1】:

    使用.idxmax()。由于TrueTrue/False 的最大值,它将返回第一个True 值的索引作为布尔索引。

    df.loc[(df['B']>8).idxmax(),'E']=3
    

    【讨论】:

    • 如果我想给前三行赋值,有什么功能吗?
    • @YANGSULIU 是的,但是请使用您的完整问题打开一个新问题,包括一个最小可重复的示例。不相关答案的 cmets 不是寻求帮助的地方。
    猜你喜欢
    • 2021-12-21
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2017-09-15
    • 2016-09-01
    相关资源
    最近更新 更多