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