我觉得有一种比这更好的方法:
import pandas as pd
df = pd.DataFrame(
[['A', 'X', 3], ['A', 'X', 5], ['A', 'Y', 7], ['A', 'Y', 1],
['B', 'X', 3], ['B', 'X', 1], ['B', 'X', 3], ['B', 'Y', 1],
['C', 'X', 7], ['C', 'Y', 4], ['C', 'Y', 1], ['C', 'Y', 6]],
columns=['c1', 'c2', 'v1'])
def callback(x):
x['seq'] = range(1, x.shape[0] + 1)
return x
df = df.groupby(['c1', 'c2']).apply(callback)
print df
Run Code Online (Sandbox Code Playgroud)
为达到这个:
c1 c2 v1 seq
0 A X 3 1
1 A X 5 2
2 A …
Run Code Online (Sandbox Code Playgroud) 题:
给定一个包含如下数据的数据框:
>>> df
data
0 START
1 blah
2 blah
3 blah
4 blah
5 END
6 START
7 blah
8 blah
9 END
Run Code Online (Sandbox Code Playgroud)
分配具有每次递增的运行数的新列的最有效方法是什么START
?这是我想要的结果:
>>> 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
Run Code Online (Sandbox Code Playgroud)
我做了什么
这很好,但速度很慢(这将适用于更大的数据帧,我相信有更好的方法可以做到这一点:
counter = 0
df = df.assign(number = 0)
for i, row in df.iterrows():
if row['data'] == …
Run Code Online (Sandbox Code Playgroud)