pandas中,人们似乎想要做的一件常见的事情是用下一个或前一个None值替换None值.使用.fillna很容易做到这一点.然而,我想做一些类似但不同的事情.

我有一个数据帧,df,有一些条目.每一行都有不同数量的条目,并且它们都是"向左调整的"(如果df是10列宽,并且某行有n<10个条目,则前n列保存条目,其余列是None).

我想要做的是找到每一行中最后一个非None的条目,并将其更改为None.这可以是从第一列到最后一列中的任何一列.

当然,我可以用for-loop来做这件事,但我的df可以相当大,所以更快的会更好.有什么主意吗?

谢谢!

推荐答案

在NumPy的帮助下,这相当容易.通过对每一行中的None进行计数,可以为每一行找到具有最后一个非None值的列.然后使用Numpy将该值更改为None:

data = np.random.random((6,10))

df = pd.DataFrame(data)
df.iloc[0, 7:] = None
df.iloc[1, 6:] = None
df.iloc[2, 5:] = None
df.iloc[3, 8:] = None
df.iloc[4, 5:] = None
df.iloc[5, 4:] = None

原始数据帧如下所示:

          0         1         2         3         4   5
0  0.992337  0.651785  0.521422       NaN       NaN NaN
1  0.912962  0.292458  0.620195  0.507071  0.010205 NaN
2  0.061320  0.565979  0.344755       NaN       NaN NaN
3  0.521936  0.057917  0.359699  0.484009       NaN NaN
isnull = df.isnull()

col = data.shape[1] - isnull.sum(axis = 1) - 1

df.values[range(len(df)), col] = None

更新后的数据帧如下所示:

          0         1         2         3   4   5
0  0.992337  0.651785       NaN       NaN NaN NaN
1  0.912962  0.292458  0.620195  0.507071 NaN NaN
2  0.061320  0.565979       NaN       NaN NaN NaN
3  0.521936  0.057917  0.359699       NaN NaN NaN

Python相关问答推荐

Python在通过Inbox调用时给出不同的响应

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

如何使用scikit-learn Python库中的Agglomerative集群算法以及集群中声明的对象数量?

"如果发生特定错误,返回值

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

非常奇怪:tzLocal.get_Localzone()基于python3别名的不同输出?

使用miniconda创建环境的问题

如何在Windows上用Python提取名称中带有逗号的文件?

无法通过python-jira访问jira工作日志(log)中的 comments

什么相当于pytorch中的numpy累积ufunc

图像 pyramid .难以创建所需的合成图像

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何获取numpy数组的特定索引值?

Python+线程\TrocessPoolExecutor

根据列值添加时区

删除marplotlib条形图上的底边

python中的解释会在后台调用函数吗?

在Python中从嵌套的for循环中获取插值

统计numpy. ndarray中的项目列表出现次数的最快方法