猿问

想先创建一个计数器。最后。在 Python 中等效

我有一个排序的熊猫数据框,如下所示:


ID      Values

'AAAA'   1

'AAAA'   2

'AAAA'   3

'BBBB'   4

'CCCC'   5

'CCCC'   6

我必须创建一个"ID_Index"像这样的新列


ID      Values  ID_Index

'AAAA'   1         1

'AAAA'   2         1

'AAAA'   3         1

'BBBB'   4         2

'CCCC'   5         3

'CCCC'   6         3

这意味着代码将检查第 1 行的 ID,它将开始计数为 1。然后每当有新的 id 时,计数器将为 +1。在 SAS 中,我们过去常常使用first.id和/或last.id. 在这里我发现使用 shift() 我们可以创建它。我在 python 中尝试了以下代码,但它不起作用。


c=1

for index, row in df_pandas.iterrows():

    if (df_pandas['ID'] == df_pandas['ID'].shift()):

        df_pandas['ID_Index']=c

    else:

         df_pandas['ID_Index'] = c+1

print df_pandas


茅侃侃
浏览 129回答 2
2回答

侃侃尔雅

我所做的是将 ID 列转换为列表,手动创建 ID_Index,然后将其附加到数据帧ids=df_pandas['ID'].tolist()counter=1id_index=[1]    for idx,id in enumerate(ids):    if idx!=0:        if ids[idx-1]!=id:            counter+=1        id_index.append(counter)df_pandas['ID_Index']=id_index确定这可能不是完美的方式,但可以完成工作

慕田峪9158850

factorize如果想要相同的值,我认为需要:df['new'] = pd.factorize(df['ID'])[0] + 1或者,如果可能,多个组:df['new'] = df['ID'].ne(df['ID'].shift()).cumsum()print (df)       ID  Values  new0  'AAAA'       1    11  'AAAA'       2    12  'AAAA'       3    13  'BBBB'       4    24  'CCCC'       5    35  'CCCC'       6    3在添加的新行中最能看出差异:df['new1'] = pd.factorize(df['ID'])[0] + 1df['new2'] = df['ID'].ne(df['ID'].shift()).cumsum()print (df)       ID  Values  new1  new20  'AAAA'       1     1     11  'AAAA'       2     1     12  'AAAA'       3     1     13  'BBBB'       4     2     24  'CCCC'       5     3     35  'CCCC'       6     3     36  'AAAA'       7     1     4
随时随地看视频慕课网APP

相关分类

Python
我要回答