非常に大きなデータファイルdf
(1,000万行20列以上)があります。値を同じ列の前の行の値と比較しています(df['Name']
)。値が同じ場合、2番目の列(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
このコードは機能しますが、非常に低速です。同じことをするためのより効率的な方法があると思いますが、誰かがそれを経験したことがありますか?
ありがとうございました!
pd.factorize()
以下のように使用します。
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としてマークされることに注意してください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加