为每组的前三行赋值

2024-04-26 13:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在pandas中编写以下逻辑代码,对于每个组的前三行,我要创建一个变量,它的值应该是1(第一行)、2(第二行)、3(第三行)。我是这样做的,在下面的代码中,我没有创建一个新的变量,因为我不知道怎么做,所以我要替换数据集中已经存在的变量。虽然我的代码没有抛出错误,但它给了我非常奇怪的结果。你知道吗

def func (i):
    data.loc[data.groupby('ID').nth(i).index,'date'] = i
func(1)

有什么建议吗? 提前谢谢。你知道吗


Tags: 数据代码idpandasdatadateindexdef
1条回答
网友
1楼 · 发布于 2024-04-26 13:37:56

如果没有重复索引,可以为每个组创建一个行id,过滤掉大于3的id,然后将其分配回数据帧:

data['date'] = (data.groupby('ID').cumcount() + 1)[lambda x: x <= 3]

这为每个ID提供了前三行1,2,3,超过3的行将具有NaN值。你知道吗


data = pd.DataFrame({"ID":[1,1,1,1,2,2,3,3,3]})
data['date'] = (data.groupby('ID').cumcount() + 1)[lambda x: x <= 3]
data

enter image description here

相关问题 更多 >