1

次のようなデータフレームがあります。

baz    qux    
one    A
one    B  
two    C   
three  A  
one    B   
one    C  

私はそれを次のように再形成しようとしています:

one two three
A   C   A
B
B
C

私はこれが可能かどうかについてかなり混乱しています。可能であれば、どのように行うでしょうか。pivot_tableメソッド asを使用しようとしましpd.pivot_table(cols='baz', rows='qux')たが、TypeError がスローされました。私はばかで、ここで本当に基本的な何かが欠けていると思います。何か案は?

4

2 に答える 2

0

それが最も最適な方法であるかどうかはわかりませんが、それは仕事をします:

import io
import pandas as pd

data = u'baz,qux\none,A\none,B\ntwo,C\nthree,A\none,B\none,C'
df = pd.read_csv(io.StringIO(data))

new = pd.DataFrame()
for key, group in df.groupby('baz'):
    new = pd.concat([new, pd.DataFrame(group.reset_index().qux, columns=[key])],
                    axis=1)
print new.replace(np.nan, '')

返されるもの:

  one two three  
0   A   C     A
1   B
2   B
3   C

bazピボット テーブルを使用すると、どの に対応するかを示すマトリックスを取得できますqux

>>> df['foo'] = 1 # Add aggregation column
>>> df.pivot_table('foo', cols='baz', rows=['qux'])
     one  three  two                 
A      1      1  NaN
B      1    NaN  NaN
C      1    NaN    1
于 2013-08-29T12:10:04.997 に答える
0

これはあなたが求めたものではありませんが、おそらくそれで十分です:

import numpy as np
import pandas as pd
df = pd.DataFrame({'baz':'one one two three one one'.split(),
                   'qux': list('ABCABC')})
grouped = df.groupby(['baz', 'qux'])
df2 = grouped.apply(pd.DataFrame.reset_index, drop=True)['qux'].unstack(level=0)

df2.reset_index(drop=True, inplace=True)
df2 = df2.reindex(columns='one two three'.split())
df2 = df2.replace(np.nan, '')
print(df2)

収量

  one two three
0   A         A
1   B          
2   B          
3   C   C      
于 2013-08-29T13:49:21.203 に答える