按字符串列分组并基于列表数组中的唯一值应用函数?

时间:2018-11-27 03:59:40

标签: python python-3.x dataframe lambda pandas-groupby

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

0 个答案:

没有答案