2017-04-10 4 views
1

トランスポーズ、そしてC2の上に集約された種類の私が本当に必要なのデータセットです。この組み合わせ、私はいくつかのテキスト解析をやっているのPython

**TABLE 1** 
C1 C2   C3 

A1 TEXT1 ANOTHER_TEXT1 
A2 TEXT1 ANOTHER_TEXT1 
B1 TEXT2 ANOTHER_TEXT1 
B2 TEXT2 ANOTHER_TEXT1 
B3 TEXT2 ANOTHER_TEXT1 
D1 TEXT3 ANOTHER_TEXT2 
D2 TEXT3 ANOTHER_TEXT2 

のように見えるデータを、持っている、とも内容C1を異なる列として使用します。基本的に、df.transposeは何をする予定ですか? しかし、問題は、私が転記すると、C2C3が集約されないということです。

基本的に、これは私が

**TABLE 2** 
C1    C2 CT1 CT2 CT3 

ANOTHER_TEXT1 TEXT1 A1 A2 NA 
ANOTHER_TEXT1 TEXT2 B1 B2 B3 
ANOTHER_TEXT2 TEXT3 D1 D2 NA 

で探していた構造である私は(下記参照)が正しいと、私にoccurancesのカウントを与える、df.pivot_table(index=['C2','C3'], aggfunc='count')をしようとしています。

**TABLE 3** 
C1    C2 CT1 
ANOTHER_TEXT1 TEXT1 2 
       TEXT2 3 
ANOTHER_TEXT2 TEXT3 2 

私は望む構造(表2)でそれをどうやって得るのですか?それはすべて可能ですか?

もしそうでない場合、私にはどのような選択肢がありますか?で、どの構造が私が望むものに最も近いものであるかのように。

あなたはその後、 unstackset_indexによって再構築、新しい列に対して cumcountを使用することができます

答えて

2

、最後add_prefix

df['g'] = df.groupby(['C2','C3']).cumcount() + 1 
df = df.set_index(['C2','C3', 'g'])['C1'].unstack().add_prefix('CT').reset_index() 
print (df) 
     C2    C3 CT1 CT2 CT3 
0 TEXT1 ANOTHER_TEXT1 A1 A5 A2 
1 TEXT2 ANOTHER_TEXT1 B1 B2 B3 
2 TEXT3 ANOTHER_TEXT2 D1 D2 None 

新しい列のためのgroupbyと別の解決策は、使用Seriesコンストラクタ:

df = df.groupby(['C2','C3'])['C1'] \ 
     .apply(lambda x: pd.Series(x.values)) \ 
     .unstack() \ 
     .rename(columns=lambda x: 'CT{}'.format(x+1)) \ 
     .reset_index() 
print (df) 
     C2    C3 CT1 CT2 CT3 
0 TEXT1 ANOTHER_TEXT1 A1 A5 A2 
1 TEXT2 ANOTHER_TEXT1 B1 B2 B3 
2 TEXT3 ANOTHER_TEXT2 D1 D2 None 
2
df.set_index(
    ['C2', 'C3', df.groupby('C2').cumcount() + 1] 
).C1.unstack().rename(columns='CT{}'.format) 

        CT1 CT2 CT3 
C2 C3       
TEXT1 ANOTHER_TEXT1 A1 A2 None 
TEXT2 ANOTHER_TEXT1 B1 B2 B3 
TEXT3 ANOTHER_TEXT2 D1 D2 None 

reset_indexを追加して、あなたが望むものを正確に得る

df.set_index(
    ['C2', 'C3', df.groupby('C2').cumcount() + 1] 
).C1.unstack().rename(columns='CT{}'.format).reset_index() 

     C2    C3 CT1 CT2 CT3 
0 TEXT1 ANOTHER_TEXT1 A1 A2 None 
1 TEXT2 ANOTHER_TEXT1 B1 B2 B3 
2 TEXT3 ANOTHER_TEXT2 D1 D2 None 
関連する問題