使用多索引pandas datafram

2024-06-16 10:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个多索引数据帧,但在尝试过滤/更新其值时遇到了一些问题。在

我需要的是:

  1. 将“名称1”、“名称2”和其他名称改为大写
  2. 例如,获取{group1+A}中所有值为1的名称
  3. 选择后获取上一步中的名称列表(名称1、名称2等)

如果我也能将这个多索引数据帧转换为“普通”数据帧,那也没问题。

示例代码:

import pandas as pd

sample_file = '.../Sample.xlsx'

excel_file = pd.ExcelFile(sample_file)
df = excel_file.parse(header=[0, 1], index_col=[0], sheet_name=0)

# Upper case columns
c_cols = licensing_df.columns.get_level_values(0).str.upper()
s_cols = licensing_df.columns.get_level_values(1).str.upper()
licensing_df.columns = pd.MultiIndex.from_arrays([c_cols, s_cols])

# TODO: step 1

# Step 2
valid = df[df[('GROUP 1', 'A')] == 1]

# TODO: Step 3

这是我使用的示例文件:Sample file

这是一个数据帧的示例图片:

enter image description here

谢谢你!在


Tags: columns数据sample名称示例dfgetlevel
2条回答

使用excel文件:

df = pd.read_excel('Downloads/Sample.xlsx', header=[0,1], index_col=0)
df

输出:

^{pr2}$

待办事项1

df.index = df.index.str.upper()
df

输出:

Lists  Group 1                                         ... Group 2                                         
Name        AR   AZ   CA   CO  CT   FL  GA   IL IN KY  ...      SC  SD   TN   TX   UT   VA WA   WI  WV   WY
NAME 1     NaN  1.0  1.0  1.0 NaN  1.0 NaN  NaN  1  1  ...       1 NaN  1.0  1.0  1.0  1.0  1  1.0 NaN  1.0
NAME 2     NaN  NaN  NaN  NaN NaN  1.0 NaN  1.0  1  1  ...       1 NaN  1.0  NaN  NaN  1.0  1  NaN NaN  NaN
NAME 3     NaN  NaN  NaN  NaN NaN  NaN NaN  1.0  1  1  ...       1 NaN  NaN  NaN  NaN  NaN  1  NaN NaN  NaN

[3 rows x 72 columns]

待办事项2

df[df.loc[:, ('Group 1', 'AZ')] == 1].index.to_list()

输出:

['NAME 1']

待办事项3

df[df.loc[:, ('Group 1', 'IL')] == 1].index.to_list()

输出:

['NAME 2', 'NAME 3']

由于您没有提供输入示例,所以我只能假设您要实现的目标。在

如果您试图用MultIndex选择和修改一个特定的行,那么可以使用.loc运算符和在MultiIndex中指定的相应元组,例如

df.loc['Name1', ('GROUP 1', 'A')]

让我们模拟一些数据。。。在

^{pr2}$

这是我们的多索引数据帧:

subject    Bob      Guido      Sue     
type        HR Temp    HR Temp  HR Temp
year visit                             
2013 1       a    b     c    d   e    f
     2       g    h     i    j   k    l
2014 1       m    n     o    p   q    r
     2       s    t     u    v   w    x

让我们选择第一行并将字母改为大写。。。在

df.loc[(2013, 1)].str.upper()

……第一列也是如此。。。在

df.loc[('Bob', 'HR')].str.upper()

…最后我们选择了一个特定的细胞

df.loc[(2014, 1), ('Guido', 'HR')].upper()

它回来了

'O'

我希望这能让你知道如何使用.loc运算符。。。。在

相关问题 更多 >