在日期之前计算值,每次循环

2024-09-29 09:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框:

+----------------+--------------+------------+
| TransactionID  |   TimeKey    | ProductKey |
+----------------+--------------+------------+
|        3621015 | '2018-01-01' |       6151 |
|        3621015 | '2018-01-01' |       4354 |
|        3487373 | '2018-01-02' |       6151 |
|        4378337 | '2018-01-03' |       6151 |
|        4378337 | '2018-01-03' |       4354 |
|        4378337 | '2018-01-03' |       3783 |
+----------------+--------------+------------+

它是一个关于交易及其各自日期以及购买的产品的数据库

我想计算每一行某个产品出现的次数。 大概是这样的:

+----------------+--------------+------------+-------+
| TransactionID  |   TimeKey    | ProductKey | count |
+----------------+--------------+------------+-------+
|        3621015 | '2018-01-01' |       6151 | NaN/0 |
|        3621015 | '2018-01-01' |       4354 | NaN/0 |
|        3487373 | '2018-01-02' |       6151 | 1     |
|        4378337 | '2018-01-03' |       6151 | 2     |
|        4378337 | '2018-01-03' |       4354 | 1     |
|        4378337 | '2018-01-03' |       3783 | NaN/0 |
+----------------+--------------+------------+-------+

现在我可以做,但是我做的方式很糟糕。 我的解决方案:

for index, row in data.iterrows():
    data['count'] = data[(data['ProductKey'] == row['ProductKey']) & (data['TimeKey'] <= row['TimeKey'])]['ProductKey'].count()

这样做30行是可以的,但我正在与一对夫妇houndred千行:\寻找想法


Tags: 数据数据库fordata产品count方式交易
2条回答

data['Count'] = data.groupby(['ProductKey'])['ProductKey'].count()

这将提供每个ProductKey的计数。如果不希望计数为NaN,请运行以下代码段

data.fillna(value = 0, inplace = True)

假设您的TimeKey已经像在示例中一样处于递增顺序,您需要groupbycumcount如下所示

data['count'] =  data.groupby('ProductKey').cumcount()

Out[384]:
   TransactionID       TimeKey  ProductKey  count
0        3621015  '2018-01-01'        6151      0
1        3621015  '2018-01-01'        4354      0
2        3487373  '2018-01-02'        6151      1
3        4378337  '2018-01-03'        6151      2
4        4378337  '2018-01-03'        4354      1
5        4378337  '2018-01-03'        3783      0

注意:如果TimeKey的顺序不是递增的,则需要在运行上面的命令之前按它对数据帧进行排序。如果您对其进行排序,则需要以正确的日期时间格式进行排序

相关问题 更多 >