我有一个 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
效果很好,但我只想在满足条件的第一行中分配值,而不是在所有行中分配值。
那么我该如何实现这一目标呢?
最佳答案
使用.idxmax()
。由于 True
是 True
/False
的最大值,因此它将返回 bool 值的第一个 True
值的索引索引。
df.loc[(df['B']>8).idxmax(),'E']=3
关于python - 为满足条件的第一行中的数据框赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64322872/