我想將列添加到熊貓數據框中,其中值是以另一列中的值開始的遞增值。比如說我有以下數據框。熊貓根據以前的列獲得計數
df = pd.DataFrame([['a', 1], ['a', 1], ['b', 5], ['c', 10], ['c', 10], ['c', 10]], columns=['x', 'y'])
df
x y
0 a 1
1 a 1
2 b 5
3 c 10
4 c 10
5 c 10
是否有一些熊貓的功能會返回一個系列,每個組的增加值?換句話說'a'
將以1
,'b'
與5
和'c'
與10
開始。輸出系列將(1, 2, 5, 10, 11, 12)
因此它可以被添加到原始數據幀像這樣:
x y z
0 a 1 1
1 a 1 2
2 b 5 5
3 c 10 10
4 c 10 11
5 c 10 12
我試過如下:
z = []
for start, length in zip(df.y.unique(), df.groupby('x').agg('count')['y']):
z.append(list(range(start, length + start)))
np.array(z).flatten()
z
[[1, 2], [5], [10, 11, 12]]
這並不完全得到我需要什麼,我不知道爲什麼陣列不會變平坦,而且看似簡單的任務似乎過於複雜。
編輯: 該解決方案應該是可擴展到更復雜的dataframes爲好,例如:
df = pd.DataFrame([['a', 1], ['b', 5], ['c', 10], ['d', 5]], columns=['x', 'y'])
df = df.append([df]*(50),ignore_index=True)
當兩者'a'
和'b'
值列「X」是eqaul至5。在這兩個的實例計數應在5
使用'ž .extend(range(start,length + start))'而不是'z.append ...' – andrew