Python 新列的运行编号以熊猫为单位,按条件递增
问题: 给定包含以下数据的数据帧:Python 新列的运行编号以熊猫为单位,按条件递增,python,pandas,dataframe,Python,Pandas,Dataframe,问题: 给定包含以下数据的数据帧: >>> df data 0 START 1 blah 2 blah 3 blah 4 blah 5 END 6 START 7 blah 8 blah 9 END 分配一个新列的最有效方法是什么?该列的运行编号在每次开始时递增?这是我想要的结果: >>> df data number 0 START 1 1 blah 1 2 bla
>>> df
data
0 START
1 blah
2 blah
3 blah
4 blah
5 END
6 START
7 blah
8 blah
9 END
分配一个新列的最有效方法是什么?该列的运行编号在每次开始时递增?这是我想要的结果:
>>> df
data number
0 START 1
1 blah 1
2 blah 1
3 blah 1
4 blah 1
5 END 1
6 START 2
7 blah 2
8 blah 2
9 END 2
我所做的
import pandas as pd
data = ['blah'] * 10
data[0], data[6] = ['START'] * 2
data[5], data[-1] = ['END'] * 2
df = pd.DataFrame({'data':data})
这很好,但速度相当慢(这将应用于更大的数据帧,我相信有更好的方法:
counter = 0
df = df.assign(number = 0)
for i, row in df.iterrows():
if row['data'] == 'START':
counter += 1
df.loc[i, 'number'] = counter
复制示例数据帧
import pandas as pd
data = ['blah'] * 10
data[0], data[6] = ['START'] * 2
data[5], data[-1] = ['END'] * 2
df = pd.DataFrame({'data':data})
这里有一条路
df.data.eq('START').cumsum()
Out[74]:
0 1
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 2
9 2
Name: data, dtype: int32
在把它分配回来之后
df['number']=df.data.eq('START').cumsum()
df
Out[76]:
data number
0 START 1
1 blah 1
2 blah 1
3 blah 1
4 blah 1
5 END 1
6 START 2
7 blah 2
8 blah 2
9 END 2
这将有助于: