2016-03-24 7 views
0
df = pd.DataFrame({'A': ['jars', 'used'], 'B': ['Phrase', 'Phrase']}) 

     A  B 
0 jars Phrase 
1 used Phrase 

所望の出力:パンダデータフレームto_dict()

{'Phrase': ['jars', 'used']} 

Bは、複数の一意の値を持つ場合(たとえば:ユニークな値であったBroadPhraseExact):

{'Phrase': ['jars', 'used'], 'Exact': ['val1', 'val2'], 'Broad': ['cat', 'dog']} 

私はこのようなことを考えていましたが、Aが鍵です。

df.set_index('B').to_dict('list') 

{'A': ['jars', 'used']} 

私が試してみた:

>>> dict([(b,[a]) for b, a in zip(df.B, df.A)]) 
{'Phrase': ['used']} 

>>> [{b:[a]} for b, a in zip(df.B, df.A)] 
[{'Phrase': ['jars']}, {'Phrase': ['used']}] 

>>> df.set_index('B').T.to_dict('list') 
{'Phrase': ['used']} 

は、これはおそらく愚か-簡単です。

+0

何 'df.B'は、複数の一意の値を持っていた場合はどうですか? –

+0

''フレーズ ':[' jars '、' used ']、' Exact ':[' val1 '、' val2 ']、' Broad ':[' cat '、' dog ']} '私の実際のデータセットでは、列 'B'は複数のユニークな値を持っています。 – Jarad

答えて

1
In [11]: df.groupby('B').agg({'A': lambda x: x.tolist()})['A'].to_dict() 
Out[11]: {'Phrase': ['jars', 'used']} 
1
df = pd.DataFrame({'A': ['jars', 'used', 'fun', 'what', 'when'], 
      'B': ['Phrase', 'Phrase', 'Exact', 'Exact', 'Broad']}, 
      columns=['A', 'B']) 
df 
     A  B 
0 jars Phrase 
1 used Phrase 
2 fun Exact 
3 what Exact 
4 when Broad 

apply代わりのaggを使用して別の方法:

df.groupby('B').apply(lambda f: f['A'].values.tolist()).to_dict() 

戻り値:

{'Broad': ['when'], 'Exact': ['fun', 'what'], 'Phrase': ['jars', 'used']} 
関連する問題