Python 连接不满足条件的列
我有以下建议:Python 连接不满足条件的列,python,loops,pandas,dataframe,Python,Loops,Pandas,Dataframe,我有以下建议: df1: A B C test1 1.06 4.0 6.00 test2 1.02 4.1 6.20 test3 1.07 0.9 6.10 test4 4.00 1.1 6.05 然后我将每行除以上一行,得到: df2: A B C test1 NaN NaN NaN test2 0.962264
df1:
A B C
test1 1.06 4.0 6.00
test2 1.02 4.1 6.20
test3 1.07 0.9 6.10
test4 4.00 1.1 6.05
然后我将每行除以上一行,得到:
df2:
A B C
test1 NaN NaN NaN
test2 0.962264 1.025000 1.033333
test3 1.049020 0.219512 0.983871
test4 3.738318 1.222222 0.991803
我希望对于大于1.35(在df2
中)或小于0.65的每个值,将df1
的前几行乘以大于1.35或小于0.65的值
所需的输出如下所示:
A B C
test1 3.96 0.87 6.00
test2 3.81 0.90 6.20
test3 4.00 0.90 6.10
test4 4.00 1.10 6.05
我编写的代码如下:
df_filtrado=pd.DataFrame()
for i in range(len(df2)):
for j in range(len(list(df2.columns))):
if df2.iloc[i,j]>1.35:
values_higher=pd.concat([df1.iloc[0:i+1,[j]]*df2.iloc[i,j],df1.iloc[i+1:,[j]]])
if df_filtrado.empty:
df_filtrado= values_higher
else:
df_filtrado=pd.concat([df_filtrado,values_higher],axis=1, join_axes=[df_filtrado.index])
elif df2.iloc[i,j]<0.65:
values_lower=pd.concat([df1.iloc[0:i+1,[j]]*df2.iloc[i,j],df1.iloc[i+1:,[j]]])
if df_filtrado.empty:
df_filtrado= values_lower
else:
df_filtrado=pd.concat([df_filtrado,values_lower],axis=1, join_axes=[df_filtrado.index])
print df_filtrado
我无法添加任何值不高于1.35或低于0.65的列,如df2
的C列
这是我尝试过的(将其添加到以前的代码中):
如何返回所需的输出???我认为最简单的方法是在没有NaN
值的情况下使用:
df = df_filtrado.combine_first(df1)
如果可能,一些NaN
s:
mask = ((df2 < 0.65) | (df2 > 1.35)).any()
df = df1.loc[:, ~mask]
print (df)
C
test1 6.00
test2 6.20
test3 6.10
test4 6.05
df = pd.concat([df_filtrado, df], axis=1)
print (df)
B A C
test1 0.878049 3.962617 6.00
test2 0.900000 3.813084 6.20
test3 0.197561 4.000000 6.10
test4 1.100000 14.953271 6.05
mask=((df2<0.65)|(df2>1.35))。任何()
df=df1.loc[:,~mask]
打印(df)
C
测试16.00
测试2.6.20
测试36.10
测试4.6.05
df=pd.concat([df_filterado,df],轴=1)
打印(df)
B A C
测试1 0.878049 3.962617 6.00
测试2 0.900000 3.813084 6.20
测试3 0.197561 4.0000006.10
测试4 1.100000 14.953271 6.05
A B B A C
test1 1.06 0.878049 4.0 3.962617 6.00
test2 1.02 0.900000 4.1 3.813084 6.20
test3 1.07 0.900000 0.9 4.000000 6.10
test4 4.00 1.100000 1.1 4.000000 6.05
df = df_filtrado.combine_first(df1)
mask = ((df2 < 0.65) | (df2 > 1.35)).any()
df = df1.loc[:, ~mask]
print (df)
C
test1 6.00
test2 6.20
test3 6.10
test4 6.05
df = pd.concat([df_filtrado, df], axis=1)
print (df)
B A C
test1 0.878049 3.962617 6.00
test2 0.900000 3.813084 6.20
test3 0.197561 4.000000 6.10
test4 1.100000 14.953271 6.05