我有一个具有数值和分类值的数据框。本质上,我要完成的工作是根据特定条件合并数据。准则是合并行时,一旦百分比列变为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>
答案 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