我想在Pandas的DataFrame中添加一个新列,在其中我通过索引分配滚动一个StoreID:
当前看起来像这样:
Unnamed: 12 Store
0 NaN 1
1 NaN 1
2 NaN 1
0 NaN 1
1 NaN 1
2 NaN 1
0 NaN 1
1 NaN 1
2 NaN 1
0 NaN 1
1 NaN 1
2 NaN 1
我希望它看起来像这样:
Unnamed: 12 Store StoreID
0 NaN 1 1
1 NaN 1 1
2 NaN 1 1
0 NaN 1 2
1 NaN 1 2
2 NaN 1 2
0 NaN 1 5
1 NaN 1 5
2 NaN 1 5
0 NaN 1 11
1 NaN 1 11
2 NaN 1 11
变量在索引达到0时发生变化。报表将具有可变数量的项目-其中大多数是每个商店的1000个记录中的100个。
我可以轻松创建一个新列,但似乎无法解决该问题! 非常感谢任何帮助-我只是从Python开始。
答案 0 :(得分:1)
您还可以获取索引差异的cumsum
df['g'] = (df.index.to_series().diff() < 0).cumsum()
0 0
1 0
2 0
0 1
1 1
2 1
0 2
1 2
2 2
0 3
1 3
2 3
答案 1 :(得分:1)
df['g'] = (df.index == 0).cumsum() - 1
print(df)
col Store g
0 NaN 1 0
1 NaN 1 0
2 NaN 1 0
0 NaN 1 1
1 NaN 1 1
2 NaN 1 1
0 NaN 1 2
1 NaN 1 2
2 NaN 1 2
0 NaN 1 3
1 NaN 1 3
2 NaN 1 3
答案 2 :(得分:1)
IIUC试试cumcount
df.groupby(df.index).cumcount()
Out[11]:
0 0
1 0
2 0
0 1
1 1
2 1
0 2
1 2
2 2
0 3
1 3
2 3
dtype: int64
答案 3 :(得分:0)
感谢大家的答复。我最终解决了这个问题:
table['STORE_ID'] = (table.index == 0).cumsum() - 1
然后根据顺序添加一些逻辑以查找store_id:
table.loc[table['STORE_ID'] == 3, 'STORE_ID'] = 11
table.loc[table['STORE_ID'] == 2, 'STORE_ID'] = 3
table.loc[table['STORE_ID'] == 1, 'STORE_ID'] = 2
table.loc[table['STORE_ID'] == 0, 'STORE_ID'] = 1
我想有一个更简单的解决方案可以更快地到达Store_ID序列,但这现在就可以完成工作了。