Sye*_*tan 3 python dataframe pandas
我有一个具有以下结构的数据框:
A
0 1
1 2
2 3
3 1
4 2
5 1
6 2
7 3
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个新的 B 列,从 0 开始,每次 A 列中出现 1 时,其值都会递增。因此上面的数据框应如下所示:
A B
0 1 0
1 2 0
2 3 0
3 1 1
4 2 1
5 1 2
6 2 2
7 3 2
Run Code Online (Sandbox Code Playgroud)
请注意,A 中 1 的出现没有模式。
我现在的代码是:
def _add_col_B(data):
data['B'] = -1
ones = list((data.index[data['A'] == 1]))
ones.append(len(data))
sent = 0
for i in range(len(ones)-1):
data.loc[ones[i] : ones[i+1],:]['B'] = sent
sent = sent + 1
return data
%timeit -r 3 _add_col_B(data)
10 loops, best of 3: 184 ms per loop
Run Code Online (Sandbox Code Playgroud)
但在我看来,它非常慢,特别是考虑到我需要重复执行此操作并且对于非常大的数据帧。有没有矢量化的方法来做到这一点?
采用矢量化方法,您可以编写:
df['B'] = (df['A'] == 1).cumsum() - 1
Run Code Online (Sandbox Code Playgroud)
这会产生 DataFrame:
A B
0 1 0
1 2 0
2 3 0
3 1 1
4 2 1
5 1 2
6 2 2
7 3 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
409 次 |
最近记录: |