簡體   English   中英

將單行轉換為 pandas 列

[英]Convert single row into pandas column

我有類似的 dataframe 文件給定簡單的 dataframe。 我想選擇單行數據並轉換為重新排列的列。

創建的問題 dataframe 是 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')

我想將 dataframe 重新排列為 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)

對原始排序值使用有序分類

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))
df1.columns = df1.iloc[2]
df1 = df1.drop(df1.index[2])
df1 = df1.rename_axis(None).rename_axis(None,axis='columns')
df1

Output

        February    January March
Name    john        riya    alex
Age     28          24      34
Status  M           F       M

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM