2016-08-05 119 views
1

創建基於類別值新列我有兩個dataframes:Python的大熊貓:從另一個數據幀

  • dfA,其中包含成千上萬的溫度數據線。每個溫度值鏈接到從不同物體測量的值(1,2,3,...,n),以便重複時間ID
  • dfB包含標識每個時間ID的標籤。這些標籤都是正確的日期/時間(date)值

現在,我想在dfA,其中包含對應於右timeID正確date值來創建一個新列。我怎樣才能做到這一點?

下面是我有數據集的幾行,作爲一個例子:

dfA = pd.DataFrame({'timeID': ['1', '2', '3','2','3','4'], 'temp': ['4.5', '5.1', '4.0','-2.3','3.9','-1.1']}) 
dfB = pd.DataFrame(pd.date_range('6/24/2013', periods=6, freq='10Min')) 
seq = pd.Series(range(1, 7)).to_frame() 
dfB = pd.concat([seq,dfB],axis=1) 
dfB.columns = ['timeID','date'] 
dfB.set_index('timeID',inplace=True) 
print(dfA) 
print(dfB) 

dfA的輸出是:

| temp timeID 
+----------------- 
| 0 4.5  1 
| 1 5.1  2 
| 2 4.0  3 
| 3 -2.3  2 
| 4 3.9  3 
| 5 -1.1  4 

dfB的輸出是:

|      date 
| timeID      
+---------------------------- 
| 1  2013-06-24 00:00:00 
| 2  2013-06-24 00:10:00 
| 3  2013-06-24 00:20:00 
| 4  2013-06-24 00:30:00 
| 5  2013-06-24 00:40:00 
| 6  2013-06-24 00:50:00 

回答

1

所有你需要確保該timeID列在兩個話語結構相同的D型的,然後你可以使用map()方法首先:

In [78]: dfA['date'] = dfA['timeID'].astype(dfB.index.dtype).map(dfB['date']) 

In [79]: dfA 
Out[79]: 
    temp timeID    date 
0 4.5  1 2013-06-24 00:00:00 
1 5.1  2 2013-06-24 00:10:00 
2 4.0  3 2013-06-24 00:20:00 
3 -2.3  2 2013-06-24 00:10:00 
4 3.9  3 2013-06-24 00:20:00 
5 -1.1  4 2013-06-24 00:30:00 

這也是情理之中的轉換timeID D型在較小的DF,因爲它會更快(更有效的),所以如果dfB小我會做這種方式:

In [82]: dfB.index = dfB.index.astype(str) 

In [84]: dfA['date'] = dfA['timeID'].map(dfB['date']) 

In [85]: dfA 
Out[85]: 
    temp timeID    date 
0 4.5  1 2013-06-24 00:00:00 
1 5.1  2 2013-06-24 00:10:00 
2 4.0  3 2013-06-24 00:20:00 
3 -2.3  2 2013-06-24 00:10:00 
4 3.9  3 2013-06-24 00:20:00 
5 -1.1  4 2013-06-24 00:30:00 
+0

真棒!非常感謝!我已經按照第二個選項中的建議轉換了'timeID' dtype - 它工作得很好! – mmeclimate

+0

@mmeclimate,很高興我能幫上忙。 ;) – MaxU

0

試試這個:

dfNew = dfA.join(dfB, on='timeID') 
+0

謝謝你的建議。這使我以下輸出:'溫度TIMEID日期 0 4.5 1 NAT 1 5.1 2的NaT 2 4.0 3的NaT 3 -2.3 2的NaT 4 3.9 3的NaT 5 -1.1 4 NaT' – mmeclimate