我试图先按从上到下的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
任何提示将不胜感激。
答案 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
。