首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fillna遍历列

使用fillna遍历列
EN

Stack Overflow用户
提问于 2020-06-29 20:06:11
回答 2查看 145关注 0票数 1

我在Day列中有以下重复的df

代码语言:javascript
复制
     Day    Value
0     0      1.0
1   NaN      1.6
2   NaN      1.0
3   NaN      1.7
4   NaN      6.0
5     0      9.0
6   NaN      7.8
7   NaN      2.5
8   NaN      1.2
9   NaN      3.4
...

我想在每一行中fillna递增+1。从而获得以下输出:

代码语言:javascript
复制
    Day     Value
0     0       1.0
1     1       1.6
2     2       1.0
3     3       1.7
4     4       6.0
5     0       9.0
6     1       7.8
7     2       2.5
8     3       1.2
9     4       3.4
...

我试过df.Day.fillna(value = dfs.iloc[-1]['Day] + 1, inplace = True)

但它不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-29 20:31:54

使用cumsum计算累计和。

代码语言:javascript
复制
df.fillna(1, inplace=True)
df['Day'] = df['Day'].groupby((df['Day']- df['Day'].shift()!=0).cumsum()).cumsum()

df
    Day Value
0   0.0 1.0
1   1.0 1.6
2   2.0 1.0
3   3.0 1.7
4   4.0 6.0
5   0.0 9.0
6   1.0 7.8
7   2.0 2.5
8   3.0 1.2
9   4.0 3.4
票数 1
EN

Stack Overflow用户

发布于 2020-06-29 20:22:04

您可以使用此函数(edit:import numpy as np before):

代码语言:javascript
复制
>>> def func(iterable):
...     counter = 1
...     out = []
...     for item in iterable:
...         if item == 0:
...             out.append(0)
...             counter = 1
...         elif np.isnan(item) == True:
...             out.append(counter)
...             counter += 1
...     return out

给定数据帧x:

代码语言:javascript
复制
>>> x
   Day
0  0.0
1  NaN
2  NaN
3  NaN
4  NaN
5  0.0
6  NaN
7  NaN
8  NaN
9  NaN
>>> x['Day'] = func(x['Day'])
>>> x
   Day
0    0
1    1
2    2
3    3
4    4
5    0
6    1
7    2
8    3
9    4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62637754

复制
相关文章

相似问题

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