给定这样的数据帧df

a     b
2     nan
3     nan
3     nan
4     nan
4     nan
4     nan
5     nan
5     nan
5     nan
5     nan
...


一个关键规则是n中的每个数字a重复n-1行。我的预期输出是:

a     b
2     1
3     1
3     2
4     1
4     2
4     3
5     1
5     2
5     3
5     4
...


因此,m中的数字b是从1n-1的列表。我以这种方式尝试过:

df.groupby('a').apply(lambda x: np.asarray(range(x['a'].unique()[0])))


但是结果是一行中的列表,这不是我想要的。

您能告诉我如何实施吗?提前致谢!

最佳答案

您需要cumcount

df['b'] = df.groupby('a').cumcount() + 1
print (df)
   a  b
0  2  1
1  3  1
2  3  2
3  4  1
4  4  2
5  4  3
6  5  1
7  5  2
8  5  3
9  5  4

关于python - 如何对python-pandas中的列进行分组和分配数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39749653/

10-11 23:02
查看更多