/ / Python:ループなしで別のデータフレームからデータフレーム内の複数の列を選択する - python、pandas

Python:ループなしで別のデータフレームからデータフレーム内の複数の列を選択する - python、pandas

私は、3000の列を持つデータフレーム(df1)を持っています。各列は株式ティッカーに対応しています。私はDataFrame(df2)で pd.read_csv 500株の株価チャート(インデックスを除く1列500行)のcsvファイル。 df2の株価指数に一致する500の列をdf1から新しいデータファイルに抽出するにはどうすればよいですか?

私はdf2の各行を繰り返し、df1から一度に1つの列を抽出するループを書くことができますが、これは遅く、おそらく最も効率的な方法ではありません。

回答:

回答№1の場合は3

locを直接使用して、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