像其他人一樣,我對你想要的東西有點困惑。
您的輸出是01
代碼的總和,每組代碼爲id
,而不是平均值。你在上一個陳述中表達得太多,這有點難以理解。爲什麼不簡單明瞭?
你可以先預處理數據:
(1)輸入
data=[
['2017-06-26 09:00:00',4015,558460648326103043],
['2017-06-26 09:05:00',4015,13721946658181148],
['2017-06-26 09:10:00',4015,288298648959188992],
['2017-06-26 09:15:00',4015,27023247031744576],
['2017-06-26 09:20:00',4015,435887716434584],
['2017-06-26 09:25:00',4015,2147614720],
['2017-06-26 09:00:00',4014,558451851700273155],
['2017-06-26 09:05:00',4014,13721941188808728],
['2017-06-26 09:10:00',4014,288263395867623424],
['2017-06-26 09:15:00',4014,18016047776938080],
['2017-06-26 09:20:00',4014,145547927225032],
['2017-06-26 09:25:00',4014,3221356544]
]
df = pd.DataFrame(data, columns=['captureTime', 'id', 'digits'])
# convert datetime
df['captureTime'] = pd.to_datetime(df.captureTime)
"""
(2)計數'01'
爲digits
df['counts01'] = df.digits.apply(
lambda x:format(x%2**60,'060b').count('01'))
# output
captureTime id digits counts01
0 2017-06-26 09:00:00 4015 558460648326103043 8
1 2017-06-26 09:05:00 4015 13721946658181148 9
2 2017-06-26 09:10:00 4015 288298648959188992 4
3 2017-06-26 09:15:00 4015 27023247031744576 5
4 2017-06-26 09:20:00 4015 435887716434584 8
5 2017-06-26 09:25:00 4015 2147614720 2
6 2017-06-26 09:00:00 4014 558451851700273155 8
7 2017-06-26 09:05:00 4014 13721941188808728 8
8 2017-06-26 09:10:00 4014 288263395867623424 4
9 2017-06-26 09:15:00 4014 18016047776938080 4
10 2017-06-26 09:20:00 4014 145547927225032 8
11 2017-06-26 09:25:00 4014 3221356544 2
現在你可以將任何類型的聚合功能。
(1)如果要爲每個id
平均值:
df.groupby('id')['counts01'].mean()
#output
id
4014 5.666667
4015 6.000000
爲了您的最後聲明中,equvanient是:
In [27]: df.groupby('id')['counts01'].sum()
Out[27]:
id
4014 34
4015 36
Name: counts01, dtype: int64
顯然,這是每個id
組總和。 (2)我不明白你是什麼意思'我想計算時間的平均值'。如果你想隨着時間的推移進行聚合,你可以先生成一個時間序列(pd.date_range
),然後按照這個時間序列進行分組。
謝謝。
那麼你在尋找一個比你有更好的解決方案嗎? – otayeby
我看到你的輸出,但我很困惑你想要什麼。輸出不是你想要的嗎? – BenT
@tiba我沒有計算出平均值。 – ejshin1