2017-08-09 4 views
1

これはPythonに新しいものです。私はpanda dataframeに取り組んでいます。Python:pandaデータフレームの行を解読する

だから私のようなデータフレームがあります。

Client_id Nb_Products 
1   2 
2   3 
3   1 

をそして私は、各行に各のclient_idためNb_Products回爆発する必要があります。 だから私は、出力に次の表が必要です。

Client_id Nb_Products_rng 
1   [1,2] 
2   [1,2,3] 
3   [1] 

し、それを爆発:私はのようなNb_Productsのために番号の範囲を作成するべきだと思います最初は

Client_id Product_Nb 
1   1 
1   2 
2   1 
2   2 
2   3 
3   1 

を。 しかし、私はこれを作ることに成功できませんでした。

私はすべての回答や回答の一部に喜んでいただけるでしょう。 はありがとう

+0

から始まるシーケンスを必要とするProduct_Nb - - 私はそれをすべて見

は、第二の列を取得するにはここでは必要ありません –

答えて

0

方法論

私はその後、私はちょうど、クライアントごとにすべての製品を反復処理により、データフレームを再構築する独自のクライアントID

df = df.set_index('Client_id') 
client_ids = df.index.get_level_values('Client_id').unique() 

を物事をスピードアップし、取得するには、まずインデックスを使用

res = pd.DataFrame(
    [ 
     [client, prod] 
     for client in client_ids 
     for prod in range(1, df.loc[client, 'Nb_Products'].max()+1) 
    ], 
    columns = ['Client_id', 'Nb_Products'] 
) 

例/試験

私はあなたが単にあなたのデータセットを '爆発' にClient_idNb_products時間の値を繰り返すことによって、それを行うことができます

import pandas as pd 
df = pd.DataFrame(
    [[1, 2], [2, 3], [3, 3]], 
    columns=['Client_id', 'Nb_Products'] 
) 

初期DATAFRAME

Client_id Nb_Products 
0   1   2 
1   2   3 
2   3   3 

結果

Client_id Nb_Products 
0   1   1 
1   1   2 
2   2   1 
3   2   2 
4   2   3 
5   3   1 
6   3   2 
7   3   3 
+0

出力がOPの要件と一致していますか?代わりに同じデータフレームを返すのではない –

+0

@ClockSlaveこれは私が必要とするものを正確に返します。あなたの助けていただきありがとうございます私はまた、あなたの提案を試してお知らせします。 –

0

を使用したテストデータ。 Client_idの値をNb_products列の値と反復して繰り返すと、新しいデータフレームの変数Client_idが生成されます。私はリストの理解を使用してこれを行います。あなたは、単に私が個人的にこのようなもののためにdataframe` `パンダにリストを置くのアイデアを嫌い1.

from io import StringIO 
import pandas as pd 

TESTDATA=StringIO("""Client_id Nb_Products 
1 2 
2 3 
3 1""") 

df = pd.read_csv(TESTDATA, sep=" ") 

col1 = [] 
_ = [col1.extend([a]*b) for a,b in zip(df.iloc[:,0].values.tolist(), df.iloc[:,1].values.tolist())] 
col2 = [] 
_ = [col2.extend(list(range(1,i+1))) for i in df.iloc[:,1].values.tolist()] 

df2 = pd.DataFrame(list(zip(col1,col2)),columns = ['Client_id', 'Product_Nb']) 
関連する問題