有与此类似的问题,但我真正要问的有点不同。我想知道是否有一种方法可以在没有 for 循环(使用地图或柱状计算)的情况下实现以下代码(如果可能)或最快的方法。我有一个包含 m 行(>1E7)和 n 列的 DataFrame(df)。第 j+1 列以全 1 或 0 开始。for i in range(len(df)): if df.iloc[i, j] == df.iloc[i-1, j]: df.iloc[i, j+1] = df.iloc[i-1, j+1]+1因此示例输出将如下所示: ... j j+1 ... 0 ... 3 1 ... 1 ... 4 1 ... 2 ... 4 2 ... 3 ... 4 3 ... 4 ... 6 1 ... 5 ... 6 2 ... 6 ... 7 1 ...
2 回答
UYOU
TA贡献1878条经验 获得超4个赞
肯定有一些问题可以回答这个问题:
s = df.iloc[:,j]
blocks = s.ne(s.shift()).cumsum()
df.iloc[:,j+1]= s.groupby(blocks).cumcount() + 1
输出:
... j j+1 ...
0 ... 3 1 ...
1 ... 4 1 ...
2 ... 4 2 ...
3 ... 4 3 ...
4 ... 6 1 ...
5 ... 6 2 ...
6 ... 7 1 ...
鸿蒙传说
TA贡献1865条经验 获得超7个赞
听起来这就是你所追求的。
df['j+1'] = df.groupby('j').cumcount() + 1
输出:
j j+1
0 3 1
1 4 1
2 4 2
3 4 3
4 6 1
5 6 2
6 7 1
添加回答
举报
0/150
提交
取消