2015-06-24 120 views
0

通過按'小時'列對我的數據框進行分組,我計算了一些有條件的小時列值。熊貓DataFrame分配多個值

Out[15]: 
    normalized_entries Hour 
3    0.000563  3 
6    0.001265  6 
23   0.002392 23 
7    0.002655  7 
2    0.002962  2 
15   0.003095 15 
11   0.004472 11 
19   0.005776 19 
14   0.008059 14 
5    0.008163  5 
22   0.008319 22 
10   0.009102 10 
18   0.011684 18 
4    0.016871  4 
1    0.034377  1 
8    0.038017  8 
13   0.065110 13 
0    0.074780  0 
9    0.076391  9 
17   0.087821 17 
21   0.090782 21 
16   0.119952 16 
12   0.157843 12 
20   0.169550 20 

問題是我怎樣才能將這些值分配給我的主數據框依賴和'小時'列。 我試過自己:

data = pandas.read_csv(turnstile_weather) 
    data = data[['Hour','ENTRIESn_hourly']] 
    data['normalized_entries'] = data['Hour'] 
    data_by_hour = data.groupby(['Hour']) 
    data_by_totalh = data_by_h.sum() 
    data_by_totalh = data_by_totalh.reset_index() 
    m= data_by_totalh.sort(columns='ENTRIESn_hourly') 
    m['normalized_entries']=m['ENTRIESn_hourly']/m['ENTRIESn_hourly'].sum() 
    # plot = ggplot(data_by_totalh,aes('Hour','ENTRIESn_hourly')) + geom_histogram(position='stack',stat='identity') 
    m2 = m[['normalized_entries','Hour']] 
    for i in range(1,len(data['Hour'])): 
     data['normalized_entries'][i] = m2['normalized_entries'][data['Hour'][i]] 

我猜想這應該與拉姆達地圖來解決,但無法弄清楚如何。 謝謝,多納塔斯

+0

你能後的原'turnstile_weather' csv文件?或一些原始數據?對於你的問題,你應該使用'groupby.apply'方法。 –

回答

0

我想你可能要使用合併,是這樣的:

pd.merge(data, m2, on = 'Hour') 
+0

pd.merge確實有效,但它也搞亂了我的數據框索引。 –

0

這應該爲你工作,並保持你的索引:

data['normalized_entries']=data['Hour'].map(m2.set_index('Hour').to_dict()['normalized_entries'])