2017-12-12 13 views
3

私は何かが簡単ではないと確信していますが、私はこれを理解することができません。 私は同じキーを持っているが、情報が異なる複数の行を持つPandasにDataFrameを持っています。これらの行を同じ行に配置したいと思います。パンダのデータフレームの行操作

df = pd.DataFrame({'key': ['K0', 'K0', 'K1', 'K2'], 
        'A': ['A0', 'A1', 'A2', 'A3'], 
        'B': ['B0', 'B1', 'B2', 'B3']}) 

これは私に4行3列のデータフレームを与えます。しかし、キーに重複値 'KO'があります

これを3行と5列のデータフレームにする方法はありますか?

df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2'], 
        'A': ['A0', 'A2', 'A3'], 
        'B': ['B0', 'B2', 'B3'], 
        'A_1': ['A1', 'NaN', 'NaN'], 
        'B_1': ['B1', 'NaN', 'NaN']}) 
+0

K0が3回繰り返されるとどうなりますか?データフレームの大きさはどれくらいでしょうか? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ私は、K0が100回以上複製されたいくつかの行を持つデータフレームを持っています。それでも私はすべてのデータを一列にする必要があります。 –

+0

はい、何度も何度も繰り返すと次元はどうなるのですか?まだ3×5? –

答えて

1

は、その後一緒に個々のグループを連結し、cumcountgroupbyを実行します。

gps = [] 
for i, g in df.groupby(df.groupby('key').cumcount()): 
    gps.append(g.drop('key', 1).add_suffix(i + 1).reset_index(drop=1)) 

r = pd.concat(gps, 1).sort_index(axis=1) 
r['key'] = df.key.unique() 

r 
    A1 A2 B1 B2 key 
0 A0 A1 B0 B1 K0 
1 A2 NaN B2 NaN K1 
2 A3 NaN B3 NaN K2 

あなたはややリストの内包表記を使用して、これを短縮することができます -

r = pd.concat(
     [g.drop('key', 1).add_suffix(i + 1).reset_index(drop=1) 
        for i, g in df.groupby(df.groupby('key').cumcount())], 
     axis=1)\ 
     .sort_index(axis=1) 

r['key'] = df.key.unique() 
r 
    A1 A2 B1 B2 key 
0 A0 A1 B0 B1 K0 
1 A2 NaN B2 NaN K1 
2 A3 NaN B3 NaN K2 
0

、その後mapformatとマルチインデックスを平らに、のは​​、groupbycumcount、そしてunstackを使用してみましょう:

df_out = df.set_index(['key', df.groupby('key').cumcount()]).unstack() 
df_out.columns = df_out.columns.map('{0[0]}_{0[1]}'.format) 
df_out.reset_index() 

出力:

key A_0 A_1 B_0 B_1 
0 K0 A0 A1 B0 B1 
1 K1 A2 None B2 None 
2 K2 A3 None B3 None 
+0

@ChristopherJamesはこの回答で助けになりました。[受け入れ](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work?answertab=votes#tab-top) 。ありがとう。 –

0

これはレイアウトを変更すると思います。行の

df2 = df.set_index([df.key,df.index]) 

その後

In [248]: df2.loc['K1'] 
Out[248]: 
    A B key 
2 A2 B2 K1 

In [249]: df2.loc['K0'] 
Out[249]: 
    A B key 
0 A0 B0 K0 
1 A1 B1 K0 

とITER:フィールドだけにアクセスするための指標としてkeyを置きます。

関連する問題