删除满足列值条件的 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有列“天”有两个额外的值2和3。我想删除自己的前两排在这种情况下,然后更换日的列值(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]


慕桂英546537
浏览 150回答 2
2回答

烙印99

您可以减去按id和分组时的最大值querym = df.groupby('id').day.transform('max')df.assign(day=df.day.sub(m - 1)).query('day >= 0')   day   id               value2    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]

三国纷争

您可以使用groupbywith tail,然后我们会cumcount重新创建这一天df.groupby('id').tail(2).assign(day=lambda x : x.groupby('id').cumcount())Out[221]:    day   id               value2    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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python