2017-01-17 5 views
2

私がしようとしているのは、列または行の数に関係なく各セルの最初の要素を選択することです(ユーザー定義の基準に基づいて変更することができます)データからのパンダのデータフレーム。私の実際のデータ構造は、私が以下に挙げたものと似ています。Python Pandas:すべてのセルで配列の最初の要素を選択

私が見えるように新しいデータフレームたい
 0  1  2 
0 [1, 2] [2, 3] [3, 6] 
1 [4, 2] [1, 4] [4, 6] 
2 [1, 2] [2, 3] [3, 6] 
3 [4, 2] [1, 4] [4, 6] 

0 1 2 
0 1 2 3 
1 4 1 4 
2 1 2 3 
3 4 1 4 

以下のコードは私と私は成功せず、自分のコードでやりたいの試み(D)に似た設定データを生成し、成功と同様の質問で私が見たことを模倣しています(c;ただし、1つの列のみ)。似ているが、別の質問へのリンクはこちらです:Python Pandas: selecting element in array column

import pandas as pd 

zz = pd.DataFrame([[[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]], 
       [[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]]]) 
print(zz) 

x= zz.dtypes 
print(x) 

a = pd.DataFrame((zz.columns.values)) 
b = pd.DataFrame.transpose(a) 
c =zz[0].str[0] # this will give the 1st value for each cell in columns 0 
d= zz[[b[0]].values].str[0] #attempt to get 1st value for each cell in all columns 

答えて

3

あなたはapplyを使用して、リストの使用indexing with strの選択最初の値のためにすることができます

print (zz.apply(lambda x: x.str[0])) 
    0 1 2 
0 1 2 3 
1 4 1 4 
2 1 2 3 
3 4 1 4 

stackunstackのもう一つの解決策:

print (zz.stack().str[0].unstack()) 
    0 1 2 
0 1 2 3 
1 4 1 4 
2 1 2 3 
3 4 1 4 
+0

をスライスしてくれてありがとう!私は両方の方法を試して、最速のものが何かを見るつもりです。 –

3

私はapplymapを使用します。これは同じ機能を各個人に適用しますあなたのデータフレーム内idualセル

df.applymap(lambda x: x[0]) 

    0 1 2 
0 1 2 3 
1 4 1 4 
2 1 2 3 
3 4 1 4 
+0

ありがとう!この方法も有効です。 –

1

私はしかし、@jezraelはすでに私からそれがダウンして答える置く...ので、+ 1 stack + unstack
の大ファンです。

これは、ここがより簡単な方法です。 numpyの配列

pd.DataFrame(
    np.array(zz.values.tolist())[:, :, 0], 
    zz.index, zz.columns 
) 

    0 1 2 
0 1 2 3 
1 4 1 4 
2 1 2 3 
3 4 1 4 

タイミング

enter image description here

+0

タイミング情報と新しいメソッドをありがとう.. + 1 –

関連する問題