python - Pandas 的每日频率计数

标签 python count pandas

As in this question我已经问过,这次我正在尝试每天进行相同的计数。所以我想这一次计算一周的较低值在星期一设置了多少次,在星期二设置了多少次,等等,并获得一周 7 天的总计数 像这样的天数和值列表:

2013.01.01,00:00,1.31802

2013.01.02,00:00,1.32038

2013.01.03,00:00,1.31859

2013.01.04,00:00,1.30508

等等

我目前正在为此使用 Pandas,我用来进行每小时计数的代码是:

df = pd.read_csv(myPath, sep=',', header=None, parse_dates=[[0, 1]])
df.columns = ["date","value"]
df.set_index("date", inplace=True)
day_min = df.resample('D', how='min')
df['is_day_min'] = day_min.lookup(df.index.normalize(), len(df) * ['value'])==df.value
df.is_day_min.resample('H', np.sum).fillna(0).astype(int)    
df.groupby(df.index.time)["is_day_max"].sum().to_csv("C:\\2013frequency_min.csv")

但是当涉及到分析每日数据时,如果我在 day_min(第 4 行)中将重采样更改为“W”,并在第 6 行中更改为“D”,则会出现此错误:KeyError: Timestamp('2013-01-01 00 :00:00', tz=无)

有人可以帮忙吗?我确定这很简单,但 Pandas 文档对我没有帮助。 即使有人有不使用 Pandas 的解决方案,也请给我看。如果有效就可以了。 谢谢

最佳答案

您可以按周使用 TimeGrouper(并查看该值是否等于该周的最小值),然后按天重新采样:

In [11]: week = df.groupby(pd.TimeGrouper('W'))

In [12]: is_week_min = week['value'].apply(lambda x: x == x.min()).astype(int)  # possibly the astype is not needed in 0.13

In [13]: is_week_min.resample('D', how='sum')  # count occurences in the day which are week min
Out[13]: 
2013-01-01    0
2013-01-02    0
2013-01-03    0
2013-01-04    1
Freq: D, dtype: int64

如果你想把它作为每周几天的列,你可以在应用程序中进行分组:

In [14]: week['value'].apply(lambda x: ((x == x.min()).astype(int).groupby(x.index.dayofweek)).sum()).unstack(1)
Out[14]: 
            1  2  3  4
2013-01-06  0  0  0  1

注意:索引是周末。

以及您提供的 pastebin 链接:

In [21]: df = pd.read_csv('http://pastebin.com/raw.php?i=SuyWZLj5', header=None, parse_dates=[[0, 1]])
         df.columns = ['date', 'value']
         df.set_index('date', inplace=True)

In [22]: df.groupby(pd.TimeGrouper('W')).value.apply(lambda x: ((x == x.min()).astype(int).groupby(x.index.dayofweek)).sum()).unstack(1)
Out[22]: 
             0  1  2  3   4
2013-01-06 NaN  0  0  0   1
2013-01-13   0  0  0  1   0
2013-01-20   0  0  0  1   0
2013-01-27   1  0  0  0   0
2013-02-03   0  1  0  0   0
2013-02-10   0  0  0  0   1
2013-02-17   0  0  0  0   1
2013-02-24   0  0  0  0   1
2013-03-03   0  0  1  0 NaN

关于python - Pandas 的每日频率计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21170194/

相关文章:

python - 根据值列 a 映射到列 b 获取列 c 创建新列

使用 ugo+rw 打开 Python 并在文件上显示 "permission denied"?

sql - 在多行中显示值 0 的 COUNT(*) 列

MYSQL 包括项目计数为零的日期值

MySQL GROUP BY 和 COUNT 多列

python - 从数据框中散点绘制多列

python - 在大字符串文件中查找部分字符串匹配的最有效方法(python)

Python 多处理附加列表

python - 将特定单词后的单词提取为列表

python - 从函数调用时显示混淆矩阵