如何显示数据帧,其中列在一行中显示两次



例如:

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

最新更新