我试图检测一个值是否在同一天连续重复两个月,但如果不遍历所有行,我无法找到方法.迭代的问题是,它会让它变得非常慢.

我的桌子:

          date country    cur    amount
0   2019-01-07     LTU    EUR    150.00
1   2019-01-08     LTU    EUR     50.00
2   2019-01-02     LTU    EUR    561.60
3   2019-01-02     LTU    EUR    990.14
4   2019-01-02     LTU    EUR    700.00
5   2019-02-07     LTU    EUR    150.00

我想要达到的目标是:

          date country    cur    amount  monthly
0   2019-01-07     LTU    EUR    150.00     True
1   2019-01-08     LTU    EUR     50.00    False
2   2019-01-02     LTU    EUR    561.60    False
3   2019-01-02     LTU    EUR    990.14    False
4   2019-01-02     LTU    EUR    700.00    False
5   2019-02-07     LTU    EUR    150.00     True

在下个月的同一天重复150.00欧元.

谢谢

推荐答案

我最终从上面sammywemmy的答案中找到了一个解决方案:

mcycle = 1 # 1 for monthly cycle; 3 for quarterly, etc.
df['monthly'] = df
    .assign(year = df.date.dt.year)
    .assign(month = df.date.dt.month)
    .assign(day = df.date.dt.day)
    .sort_values(['year', 'currency', 'amount', 'day', 'month'])
    .groupby([df.date.dt.year, df['currency'], df['amount'], df.data.dt.day])
    .month
    .transform(lambda x: 
        [m+mcycle in x.values or m-mcycle in x.values for m in x]
    )
.eq(True)

如果您有任何改进建议,请告诉我-性能或Python 风格.我只是个初学者.

Python相关问答推荐

Matlab中是否有Python的f-字符串等效物

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

如何根据参数推断对象的返回类型?

优化pytorch函数以消除for循环

如何在虚拟Python环境中运行Python程序?

根据二元组列表在pandas中创建新列

ODE集成中如何终止solve_ivp的无限运行

从spaCy的句子中提取日期

递归访问嵌套字典中的元素值

如何使用SentenceTransformers创建矢量嵌入?

基于行条件计算(pandas)

为什么'if x is None:pass'比'x is None'单独使用更快?

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

使用嵌套对象字段的Qdrant过滤

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

仅使用预先计算的排序获取排序元素

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

.awk文件可以使用子进程执行吗?

使用OpenPYXL切换图表上的行/列