2016-11-02 17 views
1

私はデータフレームdfを持っていますが、df.trajecの要素はリストです。この場合dataframe要素の値がlist [python pandas]の場合の.locの使い方

例えば、df.ix['smith']['trajec'] = ['a', 'b', 'c', 'a', 'b']

type(df.ix['smith']) = list

、私は、このようなコマンドを使用できないことが分かりました。

aaa = ['a', 'b', 'c', 'a', 'b'] 
df.loc[df.trajec == aaa] 

そして、以下のようなエラーメッセージが表示されます。

ValueError: Arrays were different lengths: 8886 vs 5

df.trajecがリストaaaに等しいデータフレームdfのサブセットを検索する方法はありますか?

+0

サンプルデータは、問題を実証して自己完結型の例を示してください。 – BrenBarn

答えて

1

あなたはmaskを作成するためのapplyが必要になります。

df = pd.DataFrame({'trajec':[['a', 'b', 'c', 'a', 'b'], 
          ['a', 'b'], 
          ['a','c', 'b']]}, 
        index=['smith','smith1','smith2']) 

print (df) 
       trajec 
smith [a, b, c, a, b] 
smith1   [a, b] 
smith2  [a, c, b] 

aaa = ['a', 'b', 'c', 'a', 'b'] 
mask = df.trajec.apply(lambda x: x == aaa) 
print (mask) 
smith  True 
smith1 False 
smith2 False 
Name: trajec, dtype: bool 

#loc can be omit if need filter all columns 
print (df[mask]) 
       trajec 
smith [a, b, c, a, b] 

#if need apply mask and return only column `trajec` 
print (df.loc[mask, 'trajec']) 
smith [a, b, c, a, b] 
Name: trajec, dtype: object 

別の可能masklist comprehensionである:

mask = [x == aaa for x in df.trajec.values] 
print (mask) 
[True, False, False] 

print (df[mask]) 
       trajec 
smith [a, b, c, a, b] 
+0

@jezraelありがとうございます。これはまさに私が欲しいものです。私はしばしば 'apply'関数を使いますが、' apply'が必要なときはしばしば忘れてしまいます。 – SUNDONG

+0

はい、 'pandas'で' list'を使うともっと複雑になります。謝辞をありがとう!いい日! – jezrael

関連する問題