首页 > 解决方案 > 删除满足列值条件的 pandas 数据帧的初始行,同时保持列中的序列值不变

问题描述

dt = {'id': [120,120,120,120,121,121,121], 'day': [0, 1,2,3,0,1,2], 'value': [[0.5,3.4,2.7],[0.45,3.4,0.7],[0.25,0.4,0.7],[0.15,0.34,0.17],[0.35,3.4,2.7],[0.5,3.44,2.57],[0.5,0.34,0.37]]}

df = pd.DataFrame(data=dt)


    day id  value
0   0   120 [0.5, 3.4, 2.7]
1   1   120 [0.45, 3.4, 0.7]
2   2   120 [0.25, 0.4, 0.7]
3   3   120 [0.15, 0.34, 0.17]
4   0   121 [0.35, 3.4, 2.7]
5   1   121 [0.5, 3.44, 2.57]
6   2   121 [0.5, 0.34, 0.37]

我有一个pandas dataframe. 我希望序列column "day"最大值不超过 1。对于column day高于 1 的值,我想删除它的初始行,然后将序列重置为 [0-1]

也就是说,在这种情况下,column"id"=120列“day”两个额外的值 2 和 3。在这种情况下,我想删除它们的前两行,然后将 day 的列值替换为 (0,1)。

结果:

    day id  value
0   0   120 [0.25, 0.4, 0.7]
1   1   120 [0.15, 0.34, 0.17]
2   0   121 [0.5, 3.44, 2.57]
3   1   121 [0.5, 0.34, 0.37]

标签: pythonpandasdataframe

解决方案


您可以使用groupbywith tail,然后我们会cumcount重新创建一天

df.groupby('id').tail(2).assign(day=lambda x : x.groupby('id').cumcount())
Out[221]: 
   day   id               value
2    0  120    [0.25, 0.4, 0.7]
3    1  120  [0.15, 0.34, 0.17]
5    0  121   [0.5, 3.44, 2.57]
6    1  121   [0.5, 0.34, 0.37]

推荐阅读