我正在尝试将timestamps
columns
中的多个pandas
中的df
排序为一个按时间排序的column
。
因此对于下面的df,我想将它们结合起来以创建一列
import pandas as pd
d = ({
'' : ['Bar','Foo','Fubar'],
'A' : ['8:00','8:29','8:58'],
'B' : ['8:30','8:59','9:28'],
'C' : ['9:00','9:29','10:00'],
})
df = pd.DataFrame(data=d)
输出:
A B C
0 Bar 8:00 8:30 9:00
1 Foo 8:29 8:59 9:29
2 Fubar 8:58 9:28 10:00
预期输出:
1 2 3
0 Bar 1 8:00
1 Foo 1 8:29
2 Bar 2 8:30
3 Fubar 1 8:58
4 Foo 2 8:59
5 Bar 3 9:00
6 Fubar 2 9:28
7 Foo 3 9:29
8 Fubar 3 10:00
我可以通过df = df.sort_values(by='1',ascending=True)
对它们进行排序,但是我需要以某种方式合并它们。我试过了;
df = df.sum(axis=1)
我也尝试过类似的加入方法,但结果总是
0 Bar8:008:309:00
1 Foo8:298:599:29
2 Fubar8:589:2810:00
更新:
使用@Wen的代码,我得到以下输出
df.columns=['',1,2,3]
df = pd.melt(df, '')
df = df.sort_values(by='value',ascending=True)
variable value
8 Fubar 3 10:00 #All ordered except for the first row?
0 Bar 1 8:00
1 Foo 1 8:29
3 Bar 2 8:30
2 Fubar 1 8:58
4 Foo 2 8:59
6 Bar 3 9:00
5 Fubar 2 9:28
7 Foo 3 9:29
除了第一行以外,其他所有商品都已订购?
答案 0 :(得分:1)
IIUC
df.columns=['',1,2,3]
df.melt('')
Out[99]:
variable value
0 Bar 1 8:00
1 Foo 1 8:29
2 Fubar 1 8:58
3 Bar 2 8:30
4 Foo 2 8:59
5 Fubar 2 9:28
6 Bar 3 9:00
7 Foo 3 9:29
8 Fubar 3 10:00
答案 1 :(得分:0)
尝试一下:
newdf = pd.DataFrame(np.repeat(df.T.values,3,axis=1)).T
newdf.columns=df.columns
newdf['new']=list(set(df['A']))+list(set(df['B']))+list(set(df['C']))
newdf['']=newdf[''][::3].tolist()*3
newdf['n']=sorted([1,2,3]*3)
newdf=newdf[['','n','new']]
print(newdf)
输出:
n new
0 Bar 1 8:00
1 Foo 1 8:29
2 Fubar 1 8:58
3 Bar 2 8:59
4 Foo 2 8:30
5 Fubar 2 9:28
6 Bar 3 9:00
7 Foo 3 10:00
8 Fubar 3 9:29