2016-07-28 12 views
0

でカテゴリ列を繰り返す私は2つのデータフレームがあります。日付範囲でデータフレームをマージ&パイソン

DF1:

Time    A B 
1469510289000 1.5 2.4 
1469510290000 2.5 7.1 
1469510291000 2.2 6.4 
1469510292000 1.4 2.3 
1469510293000 1.6 1.8 
1469510294000 2.2 4.1 
1469510295000 1.2 0.6 

のように...

DF2:

start    end   Category 
1469510289000 1469510291000 A 
1469510291000 1469510294000 B 
1469510294000 1469510295000 A 
1469510295000 NA    C 

両方のデータフレームの時間がエポックになっています。ここで、df1の&のdf2をカテゴリに合わせて&の最終列に基づいてマージします。最終的に得られたデータフレームは、この(DF1)のようになります。np.peicewiseを使用することによりフロートにカテゴリを変換することによって、それを解決することができ

Time    A B Category 
1469510289000 1.5 2.4 A 
1469510290000 2.5 7.1 A 
1469510291000 2.2 6.4 B 
1469510292000 1.4 2.3 B 
1469510293000 1.6 1.8 B 
1469510294000 2.2 4.1 A 
1469510295000 1.2 0.6 C 

が、私のカテゴリは、テキストまたはオブジェクトの場合にどのように私はそれを行うことができますか?助けてください。ありがとう

答えて

1

"オブジェクト"とはどういう意味なのですか?カテゴリが文字列型であれば、それらのデータフレームをリストに変換できます。リストでは文字列部分が自動的にこのフォームになります - > '文字列'を入力し、カテゴリラベルを対応するリストに追加すると、おそらくあなたが望むものが得られるかもしれません。この

df1: 
time A B 
    1 1.5 2.4 
    2 2.5 7.1 
    3 2.2 6.4 
    4 1.4 2.3 
    5 1.6 1.8 
    6 2.2 4.1 
    7 1.2 0.6 

df2: 
start end category 
    1  3 sthtxt1 
    3  6 sthtxt2 
    6  7 sthtxt1 
    7 NA   C 

F1 = df1.values.tolist() 
F2 = df2.values.tolist() 

for item1 in F1: 
    for item2 in F2: 
     if item1[0] >= item2[0] and item1[0] < item2[1]: 
      item1.append(item2[2]) 

whatuwant=pd.DataFrame(F1) 

whatuwant: 
time A B category 
    1.0 1.5 2.4 sthtxt1 
    2.0 2.5 7.1 sthtxt1 
    3.0 2.2 6.4 sthtxt2 
    4.0 1.4 2.3 sthtxt2 
    5.0 1.6 1.8 sthtxt2 
    6.0 2.2 4.1 sthtxt1 
    7.0 1.2 0.6  C 
+0

ありがとうございます。はい、私はオブジェクトによって文字列を意味しました。これは動作していない&複数のカテゴリの列を持つカテゴリの列に "none"を与えます。 – warwick12

+0

df1とdf2はpd.dataframeですか、それともデータファイルですか? – Chu

+0

はい、どちらもpd.DataFrameです。私は出力を得ていますが、それはすべてのカテゴリの変更後に複数の列を作成しています。 – warwick12

0

同様

これはあなたを助けるでしょうか?

list = [] 
for time in df1['Time']: 
    category = None 
    count=-1 
    for start,end in zip(df2['start'],df2['end']): 
     count += 1 
     if (time>=start and time <= end): 
      break 
    if count != -1: 
     category = df2.ix[count]['Category'] 
    list.append(category) 
df1['Category']=list 
df1 
    A B   Time Category 
0 1.5 2.4 1469510289000  A 
1 2.5 7.1 1469510290000  A 
2 2.2 6.4 1469510291000  A 
3 1.4 2.3 1469510292000  B 
4 1.6 1.8 1469510293000  B 
5 2.2 4.1 1469510294000  B 
6 1.2 0.6 1469510295000  A