python - 按变量索引对数据帧的一列进行分组

标签 python pandas

我有一个由 PartialRoutes (它们一起产生完整路线)和一个治疗变量组成的数据帧,我试图通过将它们分组在一起并保留治疗变量来将数据帧减少为完整路线。

为了更清楚地说明这一点,df 看起来像

PartialRoute  Treatment
0             1
1             0
0             0
0             0
1             0
2             0
3             0
0             0
1             1
2             0

其中“部分路由”中的每个 0 都会启动一个新组,这意味着我总是希望对所有值进行分组,直到新路由开始/索引中出现新的 0。 所以在这个例子中存在 4 个组

PartialRoute  Treatment
0             1
1             0
-----------------
0             0
-----------------
0             0
1             0
2             0
3             0
-----------------
0             0
1             1
2             0
-----------------

结果应该是这样的

Route Treatment
0     1
1     0
2     0
3     1

有什么办法可以解决这个优雅的问题吗?

最佳答案

通过比较Series.eq来创建组累计总和为 Series.cumsum然后按组聚合,例如通过 summax:

df1 = df.groupby(df['PartialRoute'].eq(0).cumsum())['Treatment'].sum().reset_index()
print (df1)
   PartialRoute  Treatment
0             1          1
1             2          0
2             3          0
3             4          1

详细信息:

print (df['PartialRoute'].eq(0).cumsum())
0    1
1    1
2    2
3    3
4    3
5    3
6    3
7    4
8    4
9    4
Name: PartialRoute, dtype: int32

如果DataFrame的第一个值不是0,则获取不同的组 - 从0开始:

print (df)
   PartialRoute  Treatment
0             1          1
1             1          0
2             0          0
3             0          0
4             1          0
5             2          0
6             3          0
7             0          0
8             1          1
9             2          0

print (df['PartialRoute'].eq(0).cumsum())
0    0
1    0
2    1
3    2
4    2
5    2
6    2
7    3
8    3
9    3
Name: PartialRoute, dtype: int32

df1 = df.groupby(df['PartialRoute'].eq(0).cumsum())['Treatment'].sum().reset_index()
print (df1)
   PartialRoute  Treatment
0             0          1
1             1          0
2             2          0
3             3          1

关于python - 按变量索引对数据帧的一列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336873/

相关文章:

python - 创建 future 的 DataFrame 日期列 - Pandas - Python

python - 为什么 Pandas 和 Seaborn 对相同的数据生成不同的 KDE 图?

python - 如何使用pip打包的django项目?

python unichr 问题

python - 使用 urllib2 进行 POST 的 400 错误请求

python - Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

python - 将函数应用于 Pandas 行-行叉积

python - 用 pandas 向量化曲线拟合数据

python - 使用 pandas 数据框标记 matplotlib.pyplot.scatter

python - PySide-Qt : Could not initialize OLE (error 80010106)