我是一个Pandas DF,其中包含日期列和ID列。我需要按日期对这些数据进行分组/排序,并为每个日期计算自第一行(时间轴开始)以来看到的唯一ID的数量。有没有办法做到这一点使用熊猫/ numpy没有写出循环?查找唯一值的累积数量
回答
看看pandas.unique:
import pandas as pd
for date in pd.unique(df['Date']):
unique_ids = pd.unique(df[df['Date']==date]['id'])
print len(unique_ids)
编辑:第二次尝试
newdf = df[['Date', 'id']].drop_duplicates()
newdf.groupby('Date').count()
正如我问:是否有办法做到这一点,而不写出一个循环 –
是的,这与一个修改工作:在调用drop_duplicates指定列。所以最后一行是:'df [['date','id']]。drop_duplicates(['id']).groupby('date')。count()。cumsum()' –
好的答案。 IINM,它依赖于日期排序的项目,所以它需要排序,如果没有。 –
至少现在是清楚OP希望...
print(df.groupby('date').id.nunique().cumsum())
测试数据套装:
date;id
2012-03-31;111
2012-03-31;2
2012-03-31;1
2012-03-31;4
2012-04-01;15
2012-04-01;6
2012-04-01;7
2012-04-01;118
2012-04-01;9
2012-05-01;10
2012-05-01;11
的两种不同的方法比较:
import pandas as pd
df = pd.read_csv('data.csv', sep=';').sort('date')
print(df[['date','id']].drop_duplicates(['id']).groupby('date').count().cumsum())
print(df.groupby('date').id.nunique().cumsum())
输出:
id
date
2012-03-31 4
2012-04-01 9
2012-05-01 11
date
2012-03-31 4
2012-04-01 9
2012-05-01 11
Name: id, dtype: int64
PS所以它不会返回正确的结果。至少对于那个数据集。这就是为什么提供测试数据集和预期输出非常重要!
PPS另一个有趣的现象:
from timeit import Timer
import pandas as pd
df = pd.read_csv('data.csv', sep=';', parse_dates=['date']).sort_values(['date'])
def drop_dups():
df[['date','id']].drop_duplicates(['id']).groupby('date').count().cumsum()
def nunique():
df.groupby('date').id.nunique().cumsum()
print('drop_dups():\t{:.6f}'.format(Timer(drop_dups).timeit(1000)))
print('nunique():\t{:.6f}'.format(Timer(nunique).timeit(1000)))
输出:
drop_dups(): 6.722572
nunique(): 1.512233
不,这不会返回正确的结果。我已经解释了为什么在这个问题下对你的评论。 –
@DmitryB,是的。我已经用证明更新了我的答案。感谢downvoting! – MaxU
你正在做一个我从未说过的假设:ID总是在增加。也许我应该提供数据,但缺乏并没有停止给出正确的答案。 –
- 1. Matlab中唯一值的累积计数
- 2. 带附加条件的唯一唯一变量的累积和
- 3. R中每个ID的唯一值的累积计数
- 4. r中每个用户变量的唯一值的累积计数
- 5. 一组值的累积分布函数
- 6. SQL累积值
- 7. Jquery数学和累积值
- 8. “变量”,在SQL Server的累积值
- 9. C++矢量积累
- 10. F#数组的累积积
- 11. 累积值在MySQL
- 12. 积累行值c#
- 13. 查找累积频率阵列
- 14. 积累在值的元组
- 15. Crystal Reports中的累积值
- 16. Graphite中积累的价值
- 17. 特定值范围的累积函数
- 18. 积累不给我矢量
- 19. 查找不同函数调用的累积和
- 20. SQL累积计数
- 21. Python:变量不累积通过函数
- 22. 查找B列中每个项目的唯一值数量
- 23. 减去累积值2008
- 24. 多重映射累积值
- 25. 组阵列和累积值
- 26. IceFaces累积查看问题
- 27. Oracle查询累积金额
- 28. 累积条件查询
- 29. SQL查询 - 找到一行超过累积比例
- 30. 累积关联数组值PHP
如何计算的唯一ID,然后应用 “cumsum” 是什么? – MaxU
如果您要提供样本输入数据和期望的输出,我们可以为您提供工作示例;) – MaxU
直到给定日期看到的唯一ID总数与每天看到的唯一ID总和不同。换句话说,U(Dn)!= U(D1)+ U(D2)+ U(D3)+ ... + D(n)'。 –