gpt4 book ai didi

python - 连接不满足条件的列

转载 作者:行者123 更新时间:2023-12-01 02:54:15 25 4
gpt4 key购买 nike

我有以下 df:

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 或低于 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

到目前为止的当前输出正常并返回以下内容:

          B         A
test1 0.878049 3.962617
test2 0.900000 3.813084
test3 0.900000 4.000000
test4 1.100000 4.000000

我无法做的是添加不具有任何高于 1.35 或低于 0.65 的值的列,例如 df2 的 C 列。

这是我尝试过的(将其添加到之前的代码中):

    normal=pd.DataFrame(df.iloc[:,i])
if df2.iloc[:,i].all()>0.65 and df2.iloc[:,i].all()<1.35:

if df_filtrado.empty:
df_filtrado= normal
else:
df_filtrado=pd.concat([df_filtrado,normal],axis=1, join_axes=[df_filtrado.index])


print df_filtrado

但是返回的输出是:

         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

如何返回所需的输出?

最佳答案

我认为最简单的是使用 combine_first如果没有 NaN 值:

df = df_filtrado.combine_first(df1)

如果可能的话,一些NaN:

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

关于python - 连接不满足条件的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44385425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com