首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列添加到Python大熊猫中,其中包含跨行的复杂逻辑

将列添加到Python大熊猫中,其中包含跨行的复杂逻辑
EN

Stack Overflow用户
提问于 2019-12-03 05:39:39
回答 1查看 122关注 0票数 2

我有一个熊猫数据像下面的列"type“和"val0”。

代码语言:javascript
复制
type    val0
   0       0
   0       0
   0       0
   1       1
   1       3
   0       0
   0       0
   0       0
   0       0
   1       3
   0       0

列" type“可以是0或1,而val0只有== 1类型有有趣的值。

我正在尝试创建两个列val1和val2。它们以类似的方式定义:

  • For val1,我想要找到至少一行类型1的连续事件,取这些事件的val0之和,并使用sum填充类型1的前一次出现之间的列,直到连续出现的最后一行为止。
  • For val2,我希望找到至少一行类型1的连续事件,在val0中获取发生的最小值,并使用min填充从连续出现的第一行到类型1.

的下一次出现的列。

使用0作为val1和val2的默认值,我将为上面的dataframe获得这个输出:

代码语言:javascript
复制
type    val0    val1    val2
   0       0       4       0
   0       0       4       0
   0       0       4       0
   1       1       4       1
   1       3       4       1
   0       0       3       1
   0       0       3       1
   0       0       3       1
   0       0       3       1
   1       3       3       3
   0       0       0       3

由于第4、5和10行键入== 1,

  • val1对于行1-5为1+3 =4,对于行6-10为3,
  • val2 is min(1,3)为行4-9,3为行10-11

什么是有效的方法来做到这一点?我实际的dataframe有几百万行,我想创建许多像val1和val2这样的列,它们使用不同类型的1行聚合。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-03 06:00:34

使用移位累积和模式(python pandas - creating a column which keeps a running count of consecutive values)

代码语言:javascript
复制
grouper = df.groupby(df['type'].ne(df['type'].shift()).cumsum())
df['val1'] = grouper['val0'].transform(np.sum)
df['val2'] = grouper['val0'].transform(np.min)
df.loc[df['type'].eq(0), ['val1', 'val2']] = np.nan
df['val1'] = df['val1'].bfill().fillna(0)
df['val2'] = df['val2'].ffill().fillna(0)
>>> df
    type  val0  val1  val2
0      0     0   4.0   0.0
1      0     0   4.0   0.0
2      0     0   4.0   0.0
3      1     1   4.0   1.0
4      1     3   4.0   1.0
5      0     0   3.0   1.0
6      0     0   3.0   1.0
7      0     0   3.0   1.0
8      0     0   3.0   1.0
9      1     3   3.0   3.0
10     0     0   0.0   3.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59150793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档