あなたは(メソッドffill
でfillna
- NaN
sおよびNone
Sを充填転送)fillna
またはcombine_first
を使用するためのreplace
とffill
でヘルパーdf
によって作成されたNone
Sを置き換えることができます。
np.random.seed(12)
df = pd.DataFrame({'A':np.random.choice(['Buy','Sell', None], 10, p=(.2,.2,.6)),
'B':np.random.choice(['Buy','Sell', None], 10, p=(.2,.2,.6)),
'C':np.random.choice(['Buy','Sell', None], 10, p=(.2,.2,.6))})
print (df)
A B C
0 Buy Sell None
1 None None Buy
2 Sell None Buy
3 None None Buy
4 Buy Buy Sell
5 None None None
6 None None None
7 Buy None None
8 None None Sell
9 Buy Buy None
df = df.fillna(df.replace({'Sell':'short', 'Buy':'long'}).ffill())
#alternative solution
#df = df.combine_first(df.replace({'Sell':'short', 'Buy':'long'}).ffill())
print (df)
A B C
0 Buy Sell None
1 long short Buy
2 Sell short Buy
3 short short Buy
4 Buy Buy Sell
5 long long short
6 long long short
7 Buy long short
8 long long Sell
9 Buy Buy short
説明:
print (df.replace({'Sell':'short', 'Buy':'long'}))
A B C
0 long short None
1 None None long
2 short None long
3 None None long
4 long long short
5 None None None
6 None None None
7 long None None
8 None None short
9 long long None
print (df.replace({'Sell':'short', 'Buy':'long'}).ffill())
A B C
0 long short None
1 long short long
2 short short long
3 short short long
4 long long short
5 long long short
6 long long short
7 long long short
8 long long short
9 long long short
ありがとうございます。あなたの答えの最初のブロックは、私が探しているものとまったく同じように思えます。購入した商品と売り手は保存され、ブランクはロングとショートに置き換えられます。説明(ブロック2)では、結果は完全にロングとショート買収と売却はなくなった。あなたのコードを見ると、後者は私が期待していたものです。しかし、あなたのコードを試して、私は前者を取得します - これは私が望んだものです。私は買い物を長いものに、売り物を短いものに置き換えているように見えます。しかし、なぜオリジナルの買物と売りは保持されていますか? – dborger
私は 'df.fillna'を' replace'と 'ffill'によって作成された' df'で2番目に使用しています。したがって、元の 'Nones'を2番目の' df 'の値で置き換えます。同様に 'combine_first'を動作させます。 – jezrael