首页 > 解决方案 > 规范化/调整时间序列数据框

问题描述

我对 Python 和 Pandas 还很陌生;几天来一直在寻找解决方案,但没有运气......这是问题所在:

我有一个如下所示的数据集,我需要剔除某些行的前几个值,因此每行中的最大值位于 A 列中。在下面的示例中,第 0 行和第 3 行将删除 A 列和行中的值4 删除 A 列和 B 列中的值,然后将所有剩余值向左移动。

    A   B   C   D
0   11  23  21  14
1   24  18  17  15
2   22  18  15  13
3   10  13  12  10
4   5   7   14  11

期望的

    A   B   C   D
0   23  21  14  NaN
1   24  18  17  15
2   22  18  15  13
3   13  12  10  NaN
4   14  11  NaN NaN

我查看了 df.shift(),但看不到如何让该函数在唯一的逐行基础上工作。我应该改用数组和循环函数吗?

任何帮助是极大的赞赏。

标签: pythonpandas

解决方案


您需要将最大值的所有左侧值转换为np.nan并使用此问题中的解决方案。我使用来自@cs95 的那个

df_final = df[df.eq(df.max(1), axis=0).cummax(1)].apply(lambda x: sorted(x, key=pd.isnull), 1)

      A     B     C     D
0  23.0  21.0  14.0   NaN
1  24.0  18.0  17.0  15.0
2  22.0  18.0  15.0  13.0
3  13.0  12.0  10.0   NaN
4  14.0  11.0   NaN   NaN

推荐阅读