【问题标题】:Manipulation of a dataframe index on the basis of values from another column根据另一列的值操作数据帧索引
【发布时间】:2020-03-05 20:03:04
【问题描述】:

假设我有一个数据框,目前有这样的数据:

   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

【问题讨论】:

    标签: python pandas dataframe indexing data-manipulation


    【解决方案1】:

    使用groupbycumcount。我们都将使用add 将 cumcount 调整 1:

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

    出来]

      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
    

    【讨论】:

    • 谢谢它的工作!不过,我有 2 个问题,当我在编写代码之前试图环顾四周时,你是如何遇到这些函数的?你能帮我弄清楚我的原始代码在逻辑方面出了什么问题吗?
    • 嘿@dexter27,很高兴它有帮助。 Wes Mckinney(pandas 的创造者)python for data analysis 是学习 pandas 的一个很好的资源。当我开始使用 pandas 时,这些书对我帮助很大。至于您自己的逻辑,恐怕我对while 循环毫无用处。一般来说,您应该尽量避免使用数据帧进行循环,几乎总是有更好的(和矢量化的)解决方案...查看this 回答此处了解有关该主题的更多详细信息。
    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2021-06-08
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多