这是我的dataframe
。请注意,最后一行与前一行来自不同的年份。索引是日期时间。
DateTime data
2016-04-01 14.01
2016-04-02 17.25
2016-04-03 16.99
2016-04-04 17.34
2018-04-05 17.07
我想计算时间戳中不重复的天数。
以下代码返回 735 。
daily = df.resample('D').sum()
print('Number of days in df:', len(daily.index))
我希望结果是 5 天。
答案 0 :(得分:1)
将DatetimeIndex.strftime
与%m-%d
一起用于天蛾,并添加Index.nunique
:
n = df.index.strftime('%m-%d').nunique()
print('Number of days in df:', n)
#Number of days in df: 5
您的解决方案应更改:
daily = df.groupby(df.index.strftime('%m-%d')).sum()
print('Number of days in df:', len(daily.index))
#Number of days in df: 5
或按单独的月份和日期分组:
daily = df.groupby([df.index.month, df.index.day]).sum()
print('Number of days in df:', len(daily.index))
#Number of days in df: 5
但是如果需要唯一值的数量也要加上年份:
n = df.index.nunique()
print('Number of days in df:', n)
#Number of days in df: 5
答案 1 :(得分:1)
您实际上不需要resample
,因为您没有对数据进行任何类型的操作。您可以简单地将索引转换为freq='D'
(假设您需要转换...也就是说,您的索引可能还包含时间戳),然后计算唯一值的数量:
c.asfreq('D').index.nunique()