我有与给定的简单数据帧类似的数据帧文件。我想选择单行数据并转换为重新排列的列。
创建的问题数据框是 df1:
import pandas as pd
data =[['Name','john','riya','alex'],
['Age',28, 24, 34],[ 'Month','February','January','March'],
['Status','M','F','M']]
df = pd.DataFrame(data,columns=['index',0,0,0])
df1 = df.set_index('index')
我想将数据帧重新排列为 df2,如下所示:
desired_data = {'January' :pd.Series(['riya', 24, 'F'], index=['Name', 'Age','Status']),
'February': pd.Series(['john', 28, 'M'], index=['Name', 'Age','Status']),
'March' : pd.Series(['alex', 34, 'M'], index=['Name', 'Age','Status'])}
df2 = pd.DataFrame(desired_data)
答案 0 :(得分:1)
对原始排序值使用 ordered categoricals:
cats = ['January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December']
df1 = (df1.set_axis(pd.Categorical(df1.loc['Month'], ordered=True, categories=cats), axis=1)
.drop('Month')
.sort_index(axis=1)
.rename_axis(index=None, columns=None))
print (df1)
January February March
Name riya john alex
Age 24 28 34
Status F M M
或者创建用于排序的字典:
cats = ['January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December']
d = {v: k for k, v in dict(enumerate(cats)).items()}
print (d)
{'January': 0, 'February': 1, 'March': 2, 'April': 3, 'May': 4, 'June': 5, 'July': 6,
'August': 7, 'September': 8, 'October': 9, 'November': 10, 'December': 11}
df1 = (df1.set_axis(df1.loc['Month'], axis=1)
.drop('Month')
.reindex(sorted(df1.loc['Month'], key=d.get), axis=1)
.rename_axis(index=None, columns=None))
print (df1)
January February March
Name riya john alex
Age 24 28 34
Status F M M
感谢@SeaBean 提供另一种解决方案:
df1 = (df1.set_axis(df1.loc['Month'], axis=1)
.drop('Month')
.sort_index(axis=1, key=lambda x: pd.to_datetime(x, format='%B').month)
.rename_axis(index=None, columns=None))
答案 1 :(得分:0)
df1.columns = df1.iloc[2]
df1 = df1.drop(df1.index[2])
df1 = df1.rename_axis(None).rename_axis(None,axis='columns')
df1
输出
February January March
Name john riya alex
Age 28 24 34
Status M F M