2017-10-28 48 views
1

這裏是我的代碼:如何統計兩列數據框中的trues和falses?

pizzarequests = pd.Series(open('pizza_requests.txt').read().splitlines()) 
line = "unix_timestamp_of_request_utc" 
lines = pizzarequests[pizzarequests.str.contains(line)].str.split(",").str[1] 
print(lines) 
dts = pd.to_datetime(lines, unit='s') 
hours = dts.dt.hour 
print(hours) 


pizzarequests = pd.Series(open('pizza_requests.txt').read().splitlines()) 
line = "requester_received_pizza" 
lines = pizzarequests[pizzarequests.str.contains(line)].str.split(",").str[1] 

data = pd.DataFrame({'houroftheday' : hours.values, 'successpizza' : lines}) 
print(data) 

****這給了我:****

 houroftheday successpizza 
23    18  true 
67     2  true 
105    14  true 
166    23  true 
258    20  true 
297    1  true 
340    2  true 
385    22  true 
... 
304646   21  false 
304686   12  false 
304746    1  false 
304783    3  false 
304840   20  false 
304907   17  false 
304948    1  false 
305023    4  false 

我如何可以總結,只有對應於trues的時間?

回答

1

首先濾波器successpizza列中的所有行通過True秒,然後sumhouroftheday

sum_hour = data.loc[data['successpizza'] == 'true', 'houroftheday'].sum() 
print (sum_hour) 
102 

如果想size是必要的只算True S,如果使用sumTrue s爲像1過程:

len_hour = (data['successpizza'] == 'true').sum() 
print (len_hour) 
8 

或者,如果每個houroftheday的需要長度:

mask = (data['successpizza'] == 'true').astype(int) 
out = mask.groupby(data['houroftheday']).sum() 
print (out) 
houroftheday 
1  1 
2  2 
3  0 
12 0 
14 1 
18 1 
20 1 
21 0 
22 1 
23 1 
Name: successpizza, dtype: int32 

解決方案刪除traling空格是str.strip

line = "requester_received_pizza" 
lines = pizzarequests[pizzarequests.str.contains(line)].str.split(",").str[1].str.strip() 
+0

是看起來像'successpizza'是一個字符串與''true''和'列'false'作爲值。 – James

+0

謝謝,我用新的條件編輯答案。 – jezrael

+0

當我做了我需要的每一個的長度,它給了我,每個小時都有零計數的真實。可能會出現什麼問題? – Yungpythonnoob

0

我想你想要計算每小時發生的次數,其中successpizzatrue。如果是這樣,你會想要使用successpizza,然後groupbyhouroftheday列分割數據幀,並使用計數聚合。

它看起來好像是從文件中讀取真/假值,所以它們是字符串。您需要先將其轉換。

data.successpizza = data.successpizza.apply(lambda x: x=='true') 
data[data.successpizza].groupby('houroftheday').count() 
相關問題