gpt4 book ai didi

python - Pandas Dataframes - 根据 df1 中的条件填充 df2

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:02 24 4
gpt4 key购买 nike

我有这个数据框 (df1),我想将数据输入到另一个数据框 (df2) 中。如果 df1 的值大于 54,我希望 df2 中的同一行在“买入”列下为“买入”,如果不是,我希望它在“卖出”列下为“卖出”。我知道这听起来很简单,但出于某种原因,当我使用下面的代码执行此操作时,它会根据 df1 中的最后一个值设置 df2 中的所有值。

for x in df1['A']:
if x > 54:
df2['Buy'] = "Buy"

else:
df2['Sell'] = "Sell"

df1:

    Date
2011-08-26 53.024284
2011-08-29 55.454285
2011-08-30 55.464287
2011-08-31 55.795715
2011-09-01 55.117142
2011-09-02 53.534286

df2:

Buy Hold Sell
Date
2011-08-26 0.0 0.0 0.0
2011-08-29 0.0 0.0 0.0
2011-08-30 0.0 0.0 0.0
2011-08-31 0.0 0.0 0.0
2011-09-01 0.0 0.0 0.0
2011-09-02 0.0 0.0 0.0

最佳答案

首先需要两个索引相同,然后可以在另一个 DataFrame df2 中使用由 df1 中的条件创建的 bool 掩码:

m = df1['A'] > 54
df2['Buy'] = df2['Buy'].mask(m, "Buy")
df2['Sell'] = df2['Sell'].mask(~m, "Sell")

assign相同:

df2 = df2.assign(Buy= df2['Buy'].mask(m, "Buy"),Sell = df2['Sell'].mask(~m, "Sell"))

或者:

df2.loc[m, 'Buy'] = "Buy"
df2.loc[~m, 'Sell'] = "Sell"

print (df2)
Buy Hold Sell
Date
2011-08-26 0 0.0 Sell
2011-08-29 Buy 0.0 0
2011-08-30 Buy 0.0 0
2011-08-31 Buy 0.0 0
2011-09-01 Buy 0.0 0
2011-09-02 0 0.0 Sell

如果索引不同使用reindex :

m = (df1['A'] > 54).reindex(df2.index, fill_value=False)

关于python - Pandas Dataframes - 根据 df1 中的条件填充 df2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47367557/

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