x = [{'id': 'Q', 'condition': ['a','b','d'], 'a': np.nan, 'b': np.nan, 'c': np.nan, 'd': np.nan},
{'id': 'Q', 'condition': ['b','a','d'], 'a': 1, 'b': 1, 'c': np.nan, 'd': 1},
{'id': 'R', 'condition': ['b','a','d'], 'a': 3, 'b': 3, 'c': np.nan, 'd': 3},
{'id': 'Q', 'condition': ['a','b','c'], 'a': 5, 'b': 5, 'c': 8, 'd': np.nan},]
pd.DataFrame(x, columns=['id','condition','a','b','c','d'])
>> id condition a b c d
0 Q [a, b, d] nan nan nan nan
1 Q [b, a, d] 1.00000 1.00000 nan 1.00000
2 R [b, a, d] 3.00000 3.00000 nan 3.00000
3 Q [a, b, c] 5.00000 5.00000 8.00000 nan
我想按列 id 分组,并基于在 condition 列中以列表格式找到的唯一值,我想应用函数lambda x: x.rolling(2, min_periods=1).sum()
。
例如,假设我们将函数应用到索引3,因此我们将按 id'Q' 分组,然后查看其第一个条件(是 'a' ),“ a”具有一列,我们只需对 'a列分别进行索引1和3的求和' 。因此,函数rolling(2, min_periods=1).sum()
应该给出 6.00000
因此,我对整个df的预期输出如下:
我将使用第一个和第二个条件来简化它。
>> id condition [...] cond1_rolling_sum_2 cond2_rolling_sum_2
0 Q [a, b, d] [...] nan nan
1 Q [b, a, d] [...] 1 1
2 R [b, a, d] [...] 3 3
3 Q [a, b, c] [...] 6 nan