2017-06-23 7 views
0

この質問は、hereと似ていますが、タプルのインデックスがあります。 リストの列をグループ化すると、単一のインデックスのために正常に動作します:2番目のインデックスは、もは​​や作品添加しない、しかしpandas groupby:タプルインデックスを持つリストを集約する

​​

mydata = [{'idx': 'A', 'idx2': 'B', 'list_str': ['hi', 'babe']}, 
      {'idx': 'A', 'idx2': 'B', 'list_str': ['take', 'a', 'walk']}, 
      {'idx': 'A', 'idx2': 'B', 'list_str': []}, 
      {'idx': 'B', 'idx2': 'C', 'list_str': ['on', 'the', 'wild', 'side']}] 

df = pd.DataFrame(mydata) 
grouped = df.groupby(('idx', 'idx2')) 
print(grouped.agg({'list_str': sum})) 

が与える期待される出力と

mydata = [{'idx': 'A', 'list_str': ['hi', 'babe']}, 
      {'idx': 'A', 'list_str': ['take', 'a', 'walk']}, 
      {'idx': 'A', 'list_str': []}, 
      {'idx': 'B', 'list_str': ['on', 'the', 'wild', 'side']}] 


df = pd.DataFrame(mydata) 
grouped = df.groupby('idx') 
print(grouped.agg({'list_str': lambda x: tuple(x)})) 

a ValueError,Function does not reduce

これを行う適切な方法は何ですか?複数の列によってグループ化するには

答えて

0

は、リストを使用します。

grouped = df.groupby(['idx', 'idx2']) 
print(grouped.agg({'list_str': sum})) 

はおそらく、あなたがやっていたと思った:

df['new_index'] = df.apply(lambda row: (row['idx'],row['idx2']), axis=1) 
df.set_index('new_index',inplace=True) 

grouped = df.groupby(df.index) 
print(grouped.agg({'list_str': sum})) 
+0

を、あなたは、コードを試したことがありますか?これは実際には同じ正確なエラーを与えます。 – nbubis

+0

あなたが入力したものを使って試しました。 groupbyコールでタプル '()'の代わりにリスト '[]'を使用しましたか?または、入力データが1つのタプルのインデックスではなく2つの別々のインデックスを持つという点で、誤ったデータが入力されていますか? – jack6e

+0

と同じ 'mydata'変数と 'df = pd.DataFrame(mydata);を使用します。 grouped = df.groupby(['idx'、 'idx2']); print(grouped.agg({'list_str':sum})) 'は、pandasバージョン0.19.2を使って同じエラーを返します。 – nbubis

関連する問題