Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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 基于另一列的值操纵数据帧索引_Python_Pandas_Dataframe_Indexing_Data Manipulation - Fatal编程技术网

Python 基于另一列的值操纵数据帧索引

Python 基于另一列的值操纵数据帧索引,python,pandas,dataframe,indexing,data-manipulation,Python,Pandas,Dataframe,Indexing,Data Manipulation,假设我有一个数据帧,它当前包含如下数据: T week 0 T-1 1 T-1 2 T-1 3 T-1 4 T-2 5 T-2 6 T-2 7 T-3 8 T-3 9 T-3 10 T-3 我想对索引进行分组,使其与我正在处理的T组相对应,例如,这是我想要的数据帧: T week 1 T-1 2 T-1 3 T-1 4 T-1 1 T-2 2 T-2 3 T-2 1 T-3 2 T-3 3 T-3 4 T-3 请注意,当存在新的T组时,索

假设我有一个数据帧,它当前包含如下数据:

   T week
0  T-1
1  T-1
2  T-1
3  T-1
4  T-2
5  T-2
6  T-2
7  T-3
8  T-3
9  T-3
10 T-3
我想对索引进行分组,使其与我正在处理的T组相对应,例如,这是我想要的数据帧:

   T week
1  T-1
2  T-1
3  T-1
4  T-1
1  T-2
2  T-2
3  T-2
1  T-3
2  T-3
3  T-3
4  T-3
请注意,当存在新的T组时,索引如何再次从1(而不是0)开始

我试着编写代码,但没有真正起作用。我需要一些帮助

import os,xlrd,pandas as pd

df = pd.read_excel(r'dir\file.xlsx')
book = xlrd.open_workbook(r'dir\file.xlsx')
sheet = book.sheet_by_name('Sheet1')

t_value = None
next_t = None
tabcount = 0
idx = 1
i = 1

while i!=sheet.nrows:
    t_value = df['T Week'][i]
    next_t = df['T Week'][i+1]
    if t_value == next_t:
        tabcount+=1
        df.at[i,'Num'] = idx
        idx+=1
    else:
        idx = 0
        df.at[i, 'Num'] = idx
    i+=1
使用和。我们都将使用将cumcount调整1:

df.index = df.groupby('T week').cumcount().add(1)
外]


谢谢你,这很有效!不过,我有两个问题,在我编写代码之前,我试着四处看看,你是如何发现这些函数的,你能帮我找出我的原始代码在逻辑方面的错误吗?嘿@dexter27,很高兴它有帮助。韦斯·麦金尼(大熊猫的创造者)是学习大熊猫的绝佳资源。当我开始使用熊猫时,这些书对我帮助很大。至于你自己的逻辑,我对
毫无用处,而我担心
会循环。一般来说,您应该尽量避免使用数据帧循环,几乎总是有更好的(矢量化的)解决方案。。。请查看此处的答案以了解有关该主题的更多详细信息。
  T week
1    T-1
2    T-1
3    T-1
4    T-1
1    T-2
2    T-2
3    T-2
1    T-3
2    T-3
3    T-3
4    T-3