RからPythonに移行しています。パンダを使い始めたばかりです。私はうまくサブセットするRコードを持っています:
k1 <- subset(data, Product = p.id & Month < mn & Year == yr, select = c(Time, Product))
今、私はPythonで同様のことをしたいです。これは私がこれまでに持っているものです:
import pandas as pd
data = pd.read_csv("../data/monthly_prod_sales.csv")
#first, index the dataset by Product. And, get all that matches a given 'p.id' and time.
data.set_index('Product')
k = data.ix[[p.id, 'Time']]
# then, index this subset with Time and do more subsetting..
私はこれを間違った方法でやっていると感じ始めています。おそらく、エレガントなソリューションがあります。誰でも助けることができますか?タイムスタンプから月と年を抽出し、サブセット化する必要があります。おそらく、これらすべてを実現するワンライナーがあります。
k1 <- subset(data, Product = p.id & Time >= start_time & Time < end_time, select = c(Time, Product))
ありがとう。
Time
とProduct
はDataFrame
の列であり、df
はDataFrame
のインスタンスであり、他の変数はスカラー値であると仮定します。
今のところ、DataFrame
インスタンスを参照する必要があります。
k1 = df.loc[(df.Product == p_id) & (df.Time >= start_time) & (df.Time < end_time), ['Time', 'Product']]
&
演算子と比較演算子の優先順位のため、括弧も必要です。 &
演算子は、実際にはオーバーロードされたビットごとの演算子であり、算術演算子と同じ優先順位を持ち、算術演算子は比較演算子よりも高い優先順位を持っています。
pandas
0.13では、新しい実験的な DataFrame.query()
メソッドが利用可能になります。 select
引数を法とするサブセットに非常に似ています:
query()
を使用すると、次のようになります。
df[['Time', 'Product']].query('Product == p_id and Month < mn and Year == yr')
以下に簡単な例を示します。
In [9]: df = DataFrame({'gender': np.random.choice(['m', 'f'], size=10), 'price': poisson(100, size=10)})
In [10]: df
Out[10]:
gender price
0 m 89
1 f 123
2 f 100
3 m 104
4 m 98
5 m 103
6 f 100
7 f 109
8 f 95
9 m 87
In [11]: df.query('gender == "m" and price < 100')
Out[11]:
gender price
0 m 89
4 m 98
9 m 87
興味のある最後のクエリは、次のような連鎖比較を利用することもできます。
k1 = df[['Time', 'Product']].query('Product == p_id and start_time <= Time < end_time')
Rに似たソリューションを探している人のためだけに:
df[(df.Product == p_id) & (df.Time> start_time) & (df.Time < end_time)][['Time','Product']]
data.loc
やquery
は必要ありませんが、少し長いと思います。
特定の列を[]でラップすることで、任意のサブセット条件を使用できることがわかりました。たとえば、列['Product'、 'Time'、 'Year'、 'Color']を持つdfがあります
そして、2014年以前に作られた製品を含めたいとしましょう。
df[df['Year'] < 2014]
これに該当するすべての行を返すため。さまざまな条件を追加できます。
df[df['Year'] < 2014][df['Color' == 'Red']
次に、上記の指示に従って必要な列を選択します。たとえば、上記のdfの製品の色とキー、
df[df['Year'] < 2014][df['Color' == 'Red'][['Product','Color']]