将Pandas多指数变成列

  • Post category:Python

将Pandas多指数变成列是一个常见的数据转换需求,主要涉及到Pandas中的数据重塑和链接操作。下面是将Pandas多指数变成列的完整攻略:

步骤一:加载数据

首先,我们需要加载数据。在本例中,我们将使用Pandas自带的数据集“tuples.csv”,该数据集包含了多指数的数据示例。

import pandas as pd

# 读取数据集
df = pd.read_csv('tuples.csv', index_col=[0, 1], header=[0, 1])
print(df)

该数据集中,有两个层级的行索引:第一个层级是州名称,第二个层级是城市名称;而列索引也有两个层级:第一个层级是年份,第二个层级是月份。因此,该数据集中有四个层级的多指数。

步骤二:重塑数据

接下来,我们需要将数据重塑,使其只有两个层级的行索引和列索引。

# 重塑行索引
df = df.reset_index()

# 重塑列索引
df.columns = [' '.join(col).strip() for col in df.columns.values]
print(df)

在这一步骤中,我们先使用reset_index()方法将多重索引中的所有层级提取出来,变成一个简单的整数型索引。然后,我们将列索引中的两个层级合并,并用空格连接,使其成为单一层级的列索引。

步骤三:链接数据

接下来,我们需要使用Pandas中的melt()方法链接数据,将多指数值变成单独的列。

# 连接数据
df = df.melt(id_vars=['State', 'City'], var_name='Date', value_name='Value')
df['Year'], df['Month'] = zip(*df['Date'].apply(lambda x: x.split('-')))
print(df)

在这个步骤中,我们使用melt()方法将多指数链接成为单独的列。这个方法的id_vars参数指定了我们要保持不变的列,也就是国家和城市这两列;var_name参数指定将原来的列索引转换为的列名称;value_name参数指定多指数列的列名称。最后,我们使用apply()方法将年份和月份从“YYYY-MM”格式的Date列中提取出来,并分别放入Year和Month列中。

如果需要额外清洗数据,可以在链接数据之后继续进行操作。

步骤四:保存结果

最后,我们需要使用to_csv()方法将结果保存到文件中。

df.to_csv('output.csv', index=False)

至此,将Pandas多指数变成列的完整攻略就完成了。通过重塑和链接数据,在保留原始数据的情况下,我们将数据从多指数变成了单独的列。