私は、3000の列を持つデータフレーム(df1)を持っています。各列は株式ティッカーに対応しています。私はDataFrame(df2)で pd.read_csv
500株の株価チャート(インデックスを除く1列500行)のcsvファイル。 df2の株価指数に一致する500の列をdf1から新しいデータファイルに抽出するにはどうすればよいですか?
私はdf2の各行を繰り返し、df1から一度に1つの列を抽出するループを書くことができますが、これは遅く、おそらく最も効率的な方法ではありません。
回答:
回答№1の場合は3locを直接使用して、DataFrameからいくつかの列を選択することができます(@waitingkuoの例を使用します)。
In [11]: df1.loc[:, df2.stock] # equivalent to df1[df2.stock]
Out[11]:
s1 s3
0 1 3
1 4 6
2 7 9
3 10 12
回答№2については2
あなたは使うことができます 参加する.
あなたの質問を簡略化するために、3つの株式、s1、s2、およびs3を df1
。そして、私たちはs1とs3しか持っていません。 df2
In [35]: df1
Out[35]:
s1 s2 s3
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
[4 rows x 3 columns]
In [36]: df2
Out[36]:
stock
0 s1
1 s3
[2 rows x 1 columns]
参加する df2
そして df1
、我々は結合する列を設定し、転置する必要があります df1
株価がインデックスになるように
In [37]: df2.join(df1.T, on="stock")
Out[37]:
stock 0 1 2 3
0 s1 1 4 7 10
1 s3 3 6 9 12
[2 rows x 5 columns]
SQLと似ている場合は、
SELECT * FROM df2 JOIN df1.T ON df2.stock = df1.T.index