我一直试图在一段时间内每天获取每个ID的频率。 我有以下数据框:
data1 = pd.DataFrame({
'Date_Time': [
'2010-01-01', '2010-01-01',
'2010-04-02', '2010-04-01',
'2011-01-01', '2011-01-01',
'2013-01-01', '2014-01-01',
'2014-01-01', '2015-01-01',
'2016-01-01', '2011-01-01'],
'ID': [1, 1, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6]
})
因此,鉴于存在相同ID的日子很多,因此我想每天获取每个ID的频率。我尝试了以下有效的方法,但仍在努力使其正确。这是我使用的代码:
for dt in set(data1['Date_Time']):
for id in df['ID']:
length = len(data1[data1['Date_Time']==dt])
data1.loc[data1['Date_Time']==dt, 'new'] = length
最终结果应该看起来像这样
答案 0 :(得分:0)
您可以将df.groupby()
与transform
结合使用:
In [94]: data1['ID_freq_per_day'] = data1.groupby(['Date_Time', 'ID'])['ID'].transform('size')
In [95]: data1
Out[95]:
Date_Time ID ID_freq_per_day
0 2010-01-01 1 2
1 2010-01-01 1 2
2 2010-04-02 1 1
3 2010-04-01 1 1
4 2011-01-01 2 2
5 2011-01-01 2 2
6 2013-01-01 3 1
7 2014-01-01 4 2
8 2014-01-01 4 2
9 2015-01-01 5 1
10 2016-01-01 6 1
11 2011-01-01 6 1