python - 如何有效地计算另一列中每个元素的较大元素的数量?
问题描述
我有以下df
name created_utc
0 t1_cqug90j 1430438400
1 t1_cqug90k 1430438400
2 t1_cqug90z 1430438400
3 t1_cqug91c 1430438401
4 t1_cqug91e 1430438401
... ... ...
其中列中的所有值name
都是唯一的。我想创建一个字典,其键与 column 中的元素相同name
。每个这样的键的值是列中created_utc
大于键的元素数。我的预期结果是
{'t1_cqug90j': 6, 't1_cqug90k': 0, 't1_cqug90z': 3, ...}
在这种情况下,列中有 6 个元素created_utc
大于 1430438400,即 的对应值t1_cqug90j
。我可以循环生成这样的字典。但是,在我的情况下,循环效率不高,行数超过 300 万行。
您能否详细说明一种更有效的方法?
import pandas as pd
import numpy as np
df = pd.read_csv('https://raw.githubusercontent.com/leanhdung1994/WebMining/main/df1.csv', header = 0)[['name', 'created_utc']]
df
解决方案
这是一种可能的方法。我们首先假设您的name
列是唯一值的。然后我们可以这样算created_utc
:
count_utc = df.groupby('created_utc').size()
cumulative_counts = count_utc.shift(fill_value=0).cumsum()
output = dict(zip(df['name'], df['created_utc'].map(cumulative_counts)) )
然后前几个输出将如下所示:
{'t1_cqug90j': 0,
't1_cqug90k': 0,
't1_cqug90z': 0,
't1_cqug91c': 3,
't1_cqug91e': 3,
't1_cqug920': 5
...
}
现在,如果name
's 不是唯一的(由于您的输出期望这不太可能),但在这种情况下,我们当然可以只取最大值cumulative_counts
减去name
计数的大小(?),如下所示:
output = dict(zip(df['name'],
df['created_utc'].map(cumulative_counts)
.sub(df.groupby('name')['name'].transform('size'))
.add(1)
) )
推荐阅读
- javascript - 样式化自定义模态,不情愿地在自定义模态周围获得白色表面
- html - 将 div 浮动到父 div 的左侧不起作用
- prolog - 我无法让我的 Flex 程序将结果输出到控制台,它只返回“否”
- elasticsearch - Elasticsearch 可以同时按地理距离和其他属性进行搜索吗?
- xcode - 如何在 Xcode 12.3 中更改部署目标?
- image - Flutter/Dart - 项目中任何地方都不存在的 URL 异常?
- python - 二维列表中的混合数据
- reactjs - 在 React.js 应用程序中覆盖 Ant 设计配置
- javascript - 如何实现具有一次读取 4 位节点的二进制树?
- c# - 登录应该发生在 asp.net 项目的前端或后端