【问题标题】:Count identical dates in pandas dataframe [duplicate]在熊猫数据框中计算相同的日期[重复]
【发布时间】:2018-07-14 04:00:28
【问题描述】:

我有一个包含日期列的数据框,我想创建一个新列来告诉我数据集包含多少相同的日期。这是原始数据集的一个最小示例:

df1:

date         
2017/01/03     
2017/01/03     
2017/01/04     
2017/01/04     
2017/01/04     
2017/01/05     

我想创建这个date_count,所以目标数据集是:

df1:

date         date_count
2017/01/03     2
2017/01/03     2
2017/01/04     3
2017/01/04     3
2017/01/04     3
2017/01/05     1

创建df1的实际代码:

dict1 = [{'date': '2017/01/03', 'date_count': 2},{'date': '2017/01/03',              'date_count': 2}, 
 {'date': '2017/01/04', 'date_count': 3},{'date': '2017/01/04',   'date_count': 3},
{'date': '2017/01/04', 'date_count': 3},{'date': '2017/01/05',    'date_count': 1}]
df = pd.DataFrame(dict1, index=['s1', 's2','s3','s1','s2','s3'])

【问题讨论】:

  • 你知道groupby吗?
  • 我现在做。但这只会给我一个列出发生的输出,对吗?
  • df.groupby('date').count()
  • 然后transform('count')
  • 我已经添加了原始df和上面的目标df

标签: python pandas date


【解决方案1】:

这是使用mapgroupby and size 的另一种方法:

>>> df
          date
s1  2017/01/03
s2  2017/01/03
s3  2017/01/04
s1  2017/01/04
s2  2017/01/04
s3  2017/01/05

df['date_count'] = df.date.map(df.groupby('date').size())

>>> df
          date  date_count
s1  2017/01/03           2
s2  2017/01/03           2
s3  2017/01/04           3
s1  2017/01/04           3
s2  2017/01/04           3
s3  2017/01/05           1

【讨论】:

  • 这很好用!!!谢谢
  • 这比仅仅转换快还是慢?在向它发送一个空 DataFrame 的情况下,它肯定比 transform('size') 更安全,但 .transform('count') 似乎并没有因此受到影响。
  • 在我看来,523 µs ± 17.4 µs1.88 ms ± 39.4 µs 相比更快。看看它如何适用于更大的 df 会很有趣。
  • 在小数据帧上,map 会更快,在非常大的数据帧上则不然。可能会切换大约 50k 行。 transform 会根据我刚刚所做的更改提前变得更快
  • @user3483203 这正是我发现的
【解决方案2】:

使用 counttransform

df['count'] = df.groupby('date')['date'].transform('count')

         date  count
0  2017/01/03      2
1  2017/01/03      2
2  2017/01/04      3
3  2017/01/04      3
4  2017/01/04      3
5  2017/01/05      1

【讨论】:

  • 我想知道为什么没有.reset_index() 就无法工作。
  • 因为只有一列,所以一旦你 groupby 它没有什么可计算的,reset_index 给它一列聚合
  • 谢谢。我从来没有只用一列使用df
  • @user32185 我没有意识到你可以索引你分组的列,这大大加快了这个方法。
猜你喜欢
  • 2021-12-26
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 2017-12-01
  • 2016-06-05
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多