将一个值与前一行中的值进行比较,并将一个值赋给另一列(Pandas)如何加速?

2024-09-28 05:16:54 发布

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

我有一个非常大的数据文件df(超过1000万行和20列)。我将一个值与同一列(df['Name'])的前一行中的值进行比较。如果值相同,则第二列(df['Run'])中的值保持不变,否则,该值将增加1。你知道吗

下面是输出的示例。你知道吗

Name       Run
e679       1
k3333      2
k3333      2
k3333      2
u772       3
u772       3
2000       4
2000       4
2000       4
...        ...

目前我正在使用以下代码:

run=1
df['Run'].iloc[0]=run

for i in range(1,len(df)):
    if df['Name'].iloc[i] == df['Name'].iloc[i-1]:
         df['Run'].iloc[i] = run
    else:
         run = run+1
         df['Run'].iloc[i] = run

这段代码可以工作,但速度很慢。我想有一个更有效的方法来做同样的事,有人有这样的经验吗?你知道吗

谢谢你!你知道吗


Tags: run代码namein示例dfforlen
2条回答

使用^{}如下所示:

print(df)
    Name
0   e679
1  k3333
2  k3333
3  k3333
4   u772
5   u772
6   2000
7   2000
8   2000

df['Run']=pd.factorize(df.Name)[0]+1
#alternative: (~df.duplicated('Name')).cumsum()
print(df)

    Name  Run
0   e679    1
1  k3333    2
2  k3333    2
3  k3333    2
4   u772    3
5   u772    3
6   2000    4
7   2000    4
8   2000    4

NaN将标记为-1

这应该起作用:

df['Run'] = (df['Name'] != df['Name'].shift()).cumsum()

相关问题 更多 >

    热门问题