根据百分比列合并列

时间:2019-11-07 20:32:32

标签: python pandas

我有一个具有数值和分类值的数据框。本质上,我要完成的工作是根据特定条件合并数据。准则是合并行时,一旦百分比列变为100%,就将这些行合并为一。将对数字行取平均值,并将列出分类值。

我在这里寻求有关如何最好地以python最有效的方式解决问题的想法。

以下是数据框的外观:

edu/stanford/nlp/models/pos-tagger/spanish/spanish-ud.tagger

这是最终数据帧的外观:

<table><tbody><tr><th>x</th><th>y</th><th>z</th><th>a</th><th>%</th></tr><tr><td>3</td><td>8</td><td>lem</td><td>or</td><td>0.5</td></tr><tr><td>7</td><td>9</td><td>lem</td><td>or</td><td>0.5</td></tr><tr><td>5</td><td>10</td><td>lem</td><td>or</td><td>0.3</td></tr><tr><td>5</td><td>9</td><td>or</td><td>or</td><td>0.7</td></tr><tr><td>10</td><td>8</td><td>or</td><td>or</td><td>1</td></tr></tbody></table>

1 个答案:

答案 0 :(得分:2)

IIUC,让我们尝试:

s = df['%'].cumsum()
grp = s.where(s.mod(1).eq(0)).bfill()
df.groupby(grp, as_index=False).agg({'x':'mean', 
                                     'y':'mean', 
                                     'z': ", ".join,
                                     'a':", ".join, 
                                     '%':'sum'})

输出:

    x    y         z       a    %
0   5  8.5  lem, lem  or, or  1.0
1   5  9.5   lem, or  or, or  1.0
2  10  8.0        or      or  1.0