多索引中的条件过滤

时间:2021-07-24 20:39:43

标签: python pandas pandas-groupby

我正在尝试有条件地删除多索引中的行(根据 Symbol 索引)(如果 Limit 等于 1),然后在接下来的几天内将其删除,直到列 Reset对于所述符号等于 1。 Limit 定义了所述 Date 允许使用的符号数。 每个 Date 的限制相同,而 Reset 是每个 Symbol

如果有一种方法可以在不遍历组的情况下执行此操作,那将是最可取的。我也很感激有关如何解决此问题的方法的建议。

生成df:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

np.random.seed(55)
symbols, symlen =   2, 3
times =             np.arange(datetime(2021, 1, 5), datetime(2021, 1, 15), timedelta(days=1)).astype(np.datetime64)
tlen =              len(times)
A, Z =              np.array(['A', 'Z']).view('int32')
symbol_names =      np.random.randint(low=A, high=Z, size=symbols * symlen, dtype='int32').view(f'U{symlen}')
limit =             np.random.randint(low=0, high=2, size=symbols*tlen, dtype='int32')
end =               np.random.randint(low=0, high=2, size=symbols*tlen, dtype='int32')
times =             np.concatenate([times] * symbols)
names =             np.array([y for x in [[s] * tlen for s in symbol_names] for y in x])
value_col =         np.random.randint(low=40, high=60, size=len(times), dtype='uint32')

df = pd.DataFrame({'Value': value_col, 'Limit': limit, 'End': end}, index=[names, times])
df.index = df.index.set_names(['Symbol', 'Date'])
df['Limit'] = df.groupby('Date')['Limit'].transform('sum')-1

groups = df.groupby(['Date', 'Symbol']).sum()

当前结果:

                    Value   Limit   Reset
Date        Symbol          
2021-01-05  FXF     58      0       1
            NHI     49      0       0
2021-01-06  FXF     50      0       0
            NHI     52      0       1
2021-01-07  FXF     40      0       1
            NHI     52      0       1
2021-01-08  FXF     50      0       0
            NHI     53      0       1
2021-01-09  FXF     43      1       0
            NHI     49      1       1
2021-01-10  FXF     47      0       0
            NHI     41      0       0
2021-01-11  FXF     58      0       0
            NHI     53      0       1
2021-01-12  FXF     41      1       0
            NHI     58      1       0
2021-01-13  FXF     59      0       0
            NHI     56      0       1
2021-01-14  FXF     53      0       1
            NHI     53      0       1

所需的输出:

                    Value   Limit   Reset
Date        Symbol          
2021-01-05  FXF     58      0       1
            NHI     49      0       0
2021-01-06  FXF     50      0       0
            NHI     52      0       1
2021-01-07  FXF     40      0       1
            NHI     52      0       1
2021-01-08  FXF     50      0       0
            NHI     53      0       1
2021-01-09  FXF     43      1       0
2021-01-10  FXF     47      0       0
2021-01-11  FXF     58      0       0
            NHI     53      0       1
2021-01-12  FXF     41      1       0
2021-01-13  FXF     59      0       0
            NHI     56      0       1
2021-01-14  FXF     53      0       1
            NHI     53      0       1

0 个答案:

没有答案
相关问题