例如:
df_test=pd.DataFrame([('tokyo',123),('london',11),('sydney',22),('taiwan',33),('hongkong',23),('la', 32)], columns=['city','count'])
city count
0 tokyo 123
1 london 11
2 sydney 22
3 taiwan 33
4 hongkong 23
5 la 32
我希望它看起来像这样,因为行比列多,所以很容易阅读。
city count city count
0 tokyo 123 taiwan 33
1 london 11 hongkong 23
2 sydney 22 la 32
您可以使用按索引值进行模数和整数除法,并按DataFrame.unstack
进行整形,最后一次排序为第二级,为了避免重复列名,请压平MultiIndex in columns
:
df = (df_test.set_index([df_test.index % 2, df_test.index // 2])
.unstack()
.sort_index(axis=1, level=1, sort_remaining=False))
df.columns = df.columns.map(lambda x: f'{x[0]}{x[1]}')
print (df)
city0 count0 city1 count1
0 tokyo 123 sydney 22
1 london 11 taiwan 33
如果可能,不默认RangeIndex
可能使用:
df_test=pd.DataFrame([('tokyo',123),('london',11),('sydney',22),('taiwan',33)],
columns=['city','count'],
index=list('abcd'))
print (df_test)
city count
a tokyo 123
b london 11
c sydney 22
d taiwan 33
arr = np.arange(len(df_test))
df = (df_test.set_index([arr % 2, arr // 2])
.unstack()
.sort_index(axis=1, level=1, sort_remaining=False))
df.columns = df.columns.map(lambda x: f'{x[0]}{x[1]}')
print (df)
city0 count0 city1 count1
0 tokyo 123 sydney 22
1 london 11 taiwan 33
EDIT:对于按行长度计数为N
的常规数据,始终有4列的解决方案:
N = len(df_test) % 2 + len(df_test) // 2
arr = np.arange(len(df_test))
df = (df_test.set_index([arr % N, arr // N])
.unstack()
.sort_index(axis=1, level=1, sort_remaining=False))
df.columns = df.columns.map(lambda x: f'{x[0]}{x[1]}')
print (df)
city0 count0 city1 count1
0 tokyo 123 taiwan 33
1 london 11 hongkong 23
2 sydney 22 la 32