![](/img/trans.png)
[英]Find intersection of two sets of columns in python pandas dataframe for each row without looping
[英]looping each row of a 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。
如果希望将除法应用于所有符合条件的行,则不应使用iterrows。 这是初始代码的固定版本:
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
while循环的两个条件需要包装在all()
(或相应的pandas函数)中,以显式检查所得布尔数组的所有值是否为true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.