循环熊猫数据帧的每一行

时间:2019-05-23 10:44:56

标签: python pandas dataframe

我有一个大数据框,如果要满足某个条件,我想将同一行的值彼此除,并为每个条件创建一个新列。

我尝试了各种循环,但是我得到一个错误,即序列的真值是模糊的。我认为我接近解决方案,但我想不出最快的方法。

df = pd.DataFrame({'colA': np.random.randn(20), 'colB': np.random.randn(20), 'colC': np.random.randn(20)})
print(df)
x = 0
y = 0.5
for ix, r in df.iterrows():
    if (r['colA'] > x) & (r['colA'] < y):    
        df.loc[ix,str(y)] = df.loc[ix,'colA']/df.loc[ix,'colB']
        x += 0.5
        y += 0.5

这就是我现在走了多远。问题是,x和y在满足条件的每一行之后增加。但是我需要对满足条件的所有行进行除法,然后增加x和y。

2 个答案:

答案 0 :(得分:2)

如果希望将除法应用于所有符合条件的行,则不应使用渐变。这是您的初始代码的固定版本:

while x <= df['colA'].max():
    sub = df.loc[(df['colA'] > x)&(df['colA'] < y)]  # filter the dataframe on both conditions
    df.loc[sub.index, str(y)] = df['colA']/df['colB']
    x += .5
    y += .5

答案 1 :(得分:0)

while循环的两个条件需要包装在all()(或相应的pandas函数)中,以显式检查所得布尔数组的所有值是否为true。