熊猫数据透视表并按多个值排序

时间:2019-02-11 20:28:34

标签: python pandas

我试图先按从上到下的IN_FID排序此表,然后再按从左到右的司法管辖区排序。我能够旋转表格并按IN_FID进行排序,但是如何从左到右添加第二种排序。

df = pd.read_csv(r'C:my\path\myfile.csv')

df['Key']=df.groupby('IN_FID').cumcount()+1
s=df.pivot_table(index='IN_FID',columns='Key',values=['Jurisdiction','CURR_VOL'],aggfunc='first')
s=s.sort_index(level=1,axis=1)
s.columns=s.columns.map('{0[0]}_{0[1]}'.format)                   

s.to_csv(r'C:\my\path\mynewfile.csv')

myfile.csv如下所示:

ROUTE_NAME  CURR_VOL    IN_FID  NEAR_RANK   Jurisdiction
test1       test1       1       test1       2
test1       test1       1       test1       3
test2       test2       2       test2       1
test3       test3       3       test3       2
test3       test3       3       test3       1

mynewfile.csv看起来像这样:

IN_FID  CURR_VOL_1  Jurisdiction_1  CURR_VOL_2  Jurisdiction_2
1       test1       2               test1       3
2       test2       1       
3       test3       1               test3       2

当前mynewfile.csv如下所示:

IN_FID  CURR_VOL_1  Jurisdiction_1  CURR_VOL_2  Jurisdiction_2
1       test1       2               test1       3
2       test2       1       
3       test3       2               test3       1

任何提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以在groupby上使用IN_FID进行尝试,然后执行unstack()

df_new = df.sort_values(['IN_FID','Jurisdiction']) \
         .groupby('IN_FID')['CURR_VOL','Jurisdiction'] \
         .apply(lambda x: pd.DataFrame(x.values, columns['CURR_VOL','Jurisdiction'])) \
         .unstack().sort_index(1, level=1)

df_new.columns = df_new.columns.droplevel(1)
df_new.reset_index(inplace=True)

输出看起来像这样

IN_FID  CURR_VOL    Jurisdiction    CURR_VOL    Jurisdiction
1       test1       2               test1       3
2       test2       1               None        None
3       test3       1               test3       2

现在,您可以根据需要通过重命名列来使用此df_new