Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向DataFrame添加新列,其值取决于索引ref_Python_Pandas_Dataframe - Fatal编程技术网

Python 向DataFrame添加新列,其值取决于索引ref

Python 向DataFrame添加新列,其值取决于索引ref,python,pandas,dataframe,Python,Pandas,Dataframe,我想向Pandas中的此数据帧添加一个新列,其中我分配了一个通过索引滚动的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

我想向Pandas中的此数据帧添加一个新列,其中我分配了一个通过索引滚动的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
我希望它看起来像这样:

   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。

您还可以获得索引差异的
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
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
使用:


IIUC Try
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

谢谢大家的回复。我最终通过以下方式解决了问题:

table['STORE_ID'] = (table.index == 0).cumsum() - 1
然后添加一些逻辑以根据顺序查找存储区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

我想有一个更简单的解决方案可以更快地到达存储ID序列,但这就完成了目前的工作。

为什么您的输出没有索引值3?我只是有点不一致。它们应该是StoreID从2跳到5再跳到11的相同原因?它只是来自没有逻辑的存储的引用列表。我可以将0,1,2序列映射到客户序列(0=1,1=2,2=5,3=11),但是有没有一种更简单的方法不需要另一个操作,然后,我认为下面三个解决方案中的一个可以回答您的问题。我喜欢直接从索引中获得结果的想法。这些都是很好的建议,但理想情况下,我希望新列滚动通过自定义数字或文本序列(即1、2、5、11),而不是(0、1、2、3…)。关于如何实现这一点有什么想法吗?@user10011212,因此,需要明确的是,您有一个指定“自定义序列”的额外输入,例如,我们可以使用
L=[1,2,5,11]
作为输入?你能相应地更新你的问题吗?