当我们在pandas中处理表格数据时,经常需要进行行列互换的操作,以更方便地对数据进行分析和处理。在这种情况下,可以使用pivot
方法和unstack
方法对数据进行行列转换。
1. pivot方法
pivot
方法可以将某一列作为索引,将另一列作为列名,并将第三列的值填充到相应的单元格中。下面是使用pivot
方法进行行列转换的示例:
import pandas as pd
data = [['John', 'Math', 85], ['Tom', 'Math', 75], ['Kate', 'Math', 90], ['John', 'English', 70], ['Tom', 'English', 80], ['Kate', 'English', 95]]
df = pd.DataFrame(data, columns=['Name', 'Subject', 'Score'])
print('原始数据:')
print(df)
print('*' * 50)
table = pd.pivot(data=df, index='Name', columns='Subject', values='Score')
print('转换后的数据:')
print(table)
执行结果如下:
原始数据:
Name Subject Score
0 John Math 85
1 Tom Math 75
2 Kate Math 90
3 John English 70
4 Tom English 80
5 Kate English 95
**************************************************
转换后的数据:
Subject English Math
Name
John 70 85
Kate 95 90
Tom 80 75
在上面的示例中,我们首先创建了一个包含学生姓名、科目和成绩的数据表,然后使用pivot
方法将原始数据中的姓名列作为索引,科目列作为列名,成绩列作为填充到相应单元格中的值,最终得到了一份以学生为行、科目为列、成绩为值的新表格。
需要注意的是,在pivot
方法中,index
参数指定了要作为新表格的行索引的列,columns
参数指定了要作为新表格的列索引的列,而values
参数则指定了要填充到新表格中的值的列。
2. unstack方法
unstack
方法可以将表格中一个层次的行或列索引转换为列或行。下面是使用unstack
方法进行行列转换的示例:
import pandas as pd
df = pd.read_csv('data.csv', index_col=[0,1])
print('原始数据:')
print(df)
print('*' * 50)
table = df.unstack(level=-1)
print('转换后的数据:')
print(table)
执行结果如下:
原始数据:
Value1 Value2
TimeStamp Person
2021-01-01 John 10 20
Kate 15 25
2021-01-02 John 12 22
Kate 18 28
**************************************************
转换后的数据:
Value1 Value2
Person John Kate John Kate
TimeStamp
2021-01-01 10 15 20 25
2021-01-02 12 18 22 28
在上面的示例中,我们首先读入包含时间戳、人名和两个数值的数据表,然后使用set_index
方法将两个列设为行索引,最后使用unstack
方法将行索引中的第二层层次结构转换为列索引,最终得到了一份以时间戳为行、人名为列、数值为值的新表格。
需要注意的是,在unstack
方法中,level
参数指定要转换的索引层数,默认为-1。如果当前索引有多个层次,则需要指定要转换的层次。转换后,原来的层次结构就被转换为了新表格中的列索引或行索引。
通过pivot
方法和unstack
方法,我们可以非常方便地对表格数据进行行列转换。在实际的数据处理工作中,这两个方法经常被用来分析和处理数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas.DataFrame的pivot()和unstack()实现行转列 - Python技术站