2017-08-28 8 views
1

こんにちはリストIDを与えられたユーザを見つけることができ、そのユーザのすべてのリストを見つけることができるユーザIDが与えられています。パンダのデータフレームへのリストのリスト

データは、この形式で提供されます:私が望む何

[['34', '345'], 
['12', '23,534,34'], 
['1', '13,42']] 

は次のようになりますパンダのデータフレームである:

UserID, ListID 
34, 345 
12, 23 
12, 534 
12, 34 
1, 13 
1, 42 

私の考えは、リスト分割のに2番目の文字列を作ることでした'コンマ'、しかしそこから私は立ち往生している。助言がありますか?

答えて

4

一つの方法です。

import pandas as pd 

data = [['34', '345'], 
['12', '23,534,34'], 
['1', '13,42']] 

new_data = [] 
for row in data: 
    x, yvals = row 
    for y in yvals.split(','): 
     new_data.append([x,y]) 

df = pd.DataFrame(new_data, columns=['UserID', 'ListID']) 
+0

はるかに良い;)+1 – jezrael

1

ここでは、データフレームのコンストラクタにそれを供給する前に、あなたのデータをクリーンアップする必要があり

In [386]: L = [['34', '345'], ['12', '23,534,34'], ['1', '13,42']] 

In [387]: (pd.DataFrame(L, columns=['UserID', 'ListID']) 
      .set_index('UserID') 
      .ListID.str.split(',') 
      .apply(pd.Series) 
      .stack() 
      .reset_index(level=0, name='ListID')) 
Out[387]: 
    UserID ListID 
0  34 345 
1  12  23 
2  12 534 
3  12  34 
4  1  13 
5  1  42 
0

あなたは次のように行うことができます:ここでは簡単なスクリプトです

df_tmp = pd.DataFrame([['34', '345'], 
['12', '23,534,34'], 
['1', '13,42']], columns=['ListID', 'UserIDs']) 

s = df_tmp['UserIDs'].str.split(',', expand=True).stack() 
i = s.index.get_level_values(0) 
df = df_tmp.loc[i].copy() 
df["UserID"] = s.values 
del df['UserIDs'] 
関連する問題