1

パンダでこのデータフレームを再形成するにはどうすればよいですか

id | col1 | col2 | col3     | value  
-----------------------------------
1  | A1   | B1   | before   | 20     
2  | A1   | B1   | after    | 13
3  | A1   | B2   | before   | 11
4  | A1   | B2   | after    | 21
5  | A2   | B1   | before   | 18 
6  | A2   | B1   | after    | 22

...次の形式に?

col1 | col2 | before  | after
-------------------------------
A1   | B1   | 20      | 13
A1   | B2   | 11      | 21
A1   | B1   | 18      | 22

編集: 2 番目のテーブルの最後の行の A1 は、A2 であると想定されています。

データがペアになっているため (「前」と「後」など)、「NA」なしで列を揃える必要があります。

df.pivot(index='col1', columns='col3', values='value')

col1一意のインデックスが作成されないため、機能しません。一意になる追加の列を作成できます。それが唯一の方法ですか?

4

2 に答える 2

0

マトリックスデータで示されているように、col1は、「一意のインデックスにはならない」ため、インデックスにすることはできません。

私はあなたの最高は次のとおりだと思います:

grouped = df.groupby('col3')
pandas.merge(grouped.first(), grouped.last(), on=['col1','col2'])
于 2012-12-24T15:44:23.957 に答える
0

ピボットした後、col1 と col2 をどのように表示したいですか? あなたの出力例は、最終行の A1 と B1 を示していますが、これらの値はどちらも 18 と 22 に関連付けられていません。いくつかのオプションがあります。

In [234]: tmp = DataFrame(
    {'id':[1,2,3,4,5,6], 
     'col1':['A1','A1','A1','A1','A2','A2'],
     'col2':['B1','B1','B2','B2','B1','B2'],
     'col3':['before','after','before','after','before','after'],
     'value':[20,13,11,21,18,22]},
    columns=['id','col1','col2','col3','value'])

オプション1:

In [236]: pivoted = pd.pivot_table(tmp, values='value',
                                        rows=['col1','col2'],
                                        cols=['col3'])
In [237]: pivoted
Out[237]:
col3       after  before
col1 col2
A1   B1       13      20
     B2       21      11
A2   B1      NaN      18
     B2       22     NaN

これは、あなたが望む種類の動作のようには聞こえません。

オプション 2:

In [238]: pivoted = pivoted.fillna(method='bfill').dropna()
Out[238]:
col3       after  before
col1 col2
A1   B1       13      20
     B2       21      11
A2   B1       22      18

In [245]: pivoted.reset_index()
Out[245]:
col3 col1 col2  after  before
0      A1   B1     13      20
1      A1   B2     21      11
2      A2   B1     22      18

これでかなり近づきます。繰り返しますが、col1 と col2 をどのように動作させたいかわかりませんが、これは前後の列に正しい値を持っています。

于 2012-12-24T19:17:12.363 に答える