2017-08-24 5 views
1

以下のように私は、データフレームを持っている:私はGROUPBY IDを使用してnumpyのを取得しようとしていますタプルのリストをnumpy配列に変更するにはどうすればよいですか?

id  points 
0 1  (-2.3, 7) 
1 1  (-5, 7) 
2 1  (-6.9, 5) 
3 2  (2, 5.9) 
4 2  (-0.3, -8) 

以下好き2darray:

df2 = df.groupby(["id"])["points"]\ 
      .apply(lambda x : np.array(x.values)).reset_index() 

をこれは動作しますが、それはのような(タプルのリストに変更以下)、どのようにnumpy配列に変更するには?または、私はタプルのリストとして実際にnumpy 2d配列ですか?

id points 
0 1 [ (-2.3, 7), (-5,7), (-6.9,5) ] 
1 2 [ (2, 5.9), (-0.3, -8) ] 
+0

ここですばらしい答えが役に立ちます:https://stackoverflow.com/questions/28176949/convert-list-of-tuples-to-structured-numpy-array – byezy

+0

実際、これらは*アレイ*のように見えます'pd.DataFrame'の中で印刷されるときのリスト –

+0

私の答えは、numpy配列のタプルではなく、2Dのnumpy配列が必要だと仮定しています。 –

答えて

3

何がしたいことはタプルのnumpyの配列がある場合、それはあなたがすでに持っているものです:

In [8]: df.groupby('id').points.apply(np.asarray).values 
Out[8]: 
array([array([(-2.3, 7), (-5, 7), (-6.9, 5)], dtype=object), 
     array([(2, 5.9), (-0.3, -8)], dtype=object)], dtype=object) 

をしかし、あなたがするのではなく、2次元配列へのあなたの出力を変換したい場合読み込まれたタプルの配列。


オプション1

変換points GROUPBY前に(あなたがlambdaせずに管理することができます):

In [785]: df.points = df.points.apply(np.array); df 
Out[785]: 
    id  points 
0 1 [-2.3, 7.0] 
1 1  [-5, 7] 
2 1 [-6.9, 5.0] 
3 2 [2.0, 5.9] 
4 2 [-0.3, -8.0] 

In [787]: df.groupby('id').points.apply(np.asarray) 
Out[787]: 
id 
1 [[-2.3, 7.0], [-5, 7], [-6.9, 5.0]] 
2    [[2.0, 5.9], [-0.3, -8.0]] 

オプション2

(GROUPBY後にごpointsを変換します」 01が必要ですこのため):一度行わ

In [796]: df.groupby('id').points.apply(lambda x: np.array(list(map(list, x)))) 
Out[796]: 
id 
1 [[-2.3, 7.0], [-5.0, 7.0], [-6.9, 5.0]] 
2     [[2.0, 5.9], [-0.3, -8.0]] 

、ご希望の出力を得るためにdf.reset_indexを呼び出します。

+0

おそらく新しいIpythonセッシュを開始する時間。 –

+0

@ juanpa.arrivillaga Ahahahaはい。私が最後に再起動したのは、プロンプトが2k何かを読んだときでした。しましょう。 –

+0

私は答えの形式が本当に好きです – piRSquared

関連する問題