首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于col[c]的col[a]==Value

基于col[c]的col[a]==Value
EN

Stack Overflow用户
提问于 2021-03-07 22:33:11
回答 1查看 32关注 0票数 0

我有一个数据像素,total_time,我想:

  • 创建了一个新列"total_time_one",它获取像素1的total_time,并将其投影为

代码语言:javascript
复制
 pixel  total_time  total_time_one
     1     218.835         218.835 #projected times of pixel 1 onto all valyues
     1     218.835         218.835
     1     218.835         218.835
     2     219.878         218.835
     2     219.878         218.835
     2     219.878         218.835
     3     220.911         218.835
     3     220.911         218.835
     3     220.911         218.835
     1     230.189         230.189 #value changes cause pixel 1 shows up again
     1     230.189         230.189
     1     230.189         230.189
     2     231.441         230.189
     2     231.441         230.189
     2     231.441         230.189

以上资料如下:

代码语言:javascript
复制
uniqueone = df.query("pixel==1").total_time.unique()
mask = df["total_time"].isin(uniqueone)
df["total_time_one"] = (df[mask]["total_time"])#putting it here isn't working: .fillna(method='ffill')
df["total_time_one"] = df["total_time_one"].fillna(method='ffill')

然而,代码很长,并且重复自己,是否有更适合自己的函数?还是更好的解决方案?

我也不知道为什么我说:

代码语言:javascript
复制
df["total_time_one"] = (df[mask]["total_time"].fillna(method='ffill')

它不起作用了,我得多加一句:

代码语言:javascript
复制
df["total_time_one"] = df["total_time_one"].fillna(method='ffill')

使它发挥作用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-07 22:39:20

使用where对不是'pixel'==1的值进行NaN,然后使用ffill。从技术上讲,这将填充每个组的最后一个值,但您的值在每个像素组中都是静态的。

代码语言:javascript
复制
df['total_time_one'] = df['total_time'].where(df.pixel.eq(1)).ffill()

代码语言:javascript
复制
    pixel  total_time  total_time_one
0       1     218.835         218.835
1       1     218.835         218.835
2       1     218.835         218.835
3       2     219.878         218.835
4       2     219.878         218.835
5       2     219.878         218.835
6       3     220.911         218.835
7       3     220.911         218.835
8       3     220.911         218.835
9       1     230.189         230.189
10      1     230.189         230.189
11      1     230.189         230.189
12      2     231.441         230.189
13      2     231.441         230.189
14      2     231.441         230.189

如果您希望在每个组中使用first值(与最后一个组相反),或者说取平均值,然后使用ffill,则可以使用groupby + transform。使用1比较的累积和标记连续组的!=

代码语言:javascript
复制
df['total_time_one'] =  (df['total_time'].where(df.pixel.eq(1))
                            .groupby(df.pixel.ne(1).cumsum())
                            .transform('first')  
                            .ffill())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66522183

复制
相关文章

相似问题

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