如何计算两列数据帧中的真与假?

2024-10-02 06:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

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 

我怎样才能计算出只与事实相符的小时数呢?你知道吗


Tags: txtfalsetruereadlineopenrequestsseries
2条回答

我想您需要一个每小时发生次数的计数,其中successpizzatrue。如果是这样,您将希望使用successpizza对数据帧进行切片,然后groupbyhouroftheday列进行houroftheday并使用计数进行聚合。你知道吗

看起来您正在从文件中读取真/假值,因此它们是字符串。你需要先转换它们。你知道吗

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

首先按列successpizza中的True筛选所有行,然后按列sum筛选houroftheday

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

如果需要size只需要计数True,如果使用sum,则True是类似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

删除跟踪空白的解决方案是^{}

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

相关问题 更多 >

    热门问题