将新列添加到DataFrame中,其值取决于索引ref

时间:2018-07-31 21:50:12

标签: python pandas dataframe

我想在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开始。

4 个答案:

答案 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)

使用np.ndarray.cumsum

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序列,但这现在就可以完成工作了。