我有两个列表如下:
speakers = ['S0\n', 'S0\n', 'S0\n', 'S1\n']
breaks = [0.86, 10.31, 22.43, 5.83]
我的最终目标是根据时间值对它们进行排序,因此我得到了这两个列表:
speakers = ['S0\n', 'S1\n', 'S0\n', 'S0\n']
breaks = [0.86, 5.83, 10.31, 22.43]
因此我尝试这样做:
#create a dataframe
import pandas as pd
df = pd.DataFrame(breaks, speakers)
df.columns = ['breaks']
df = df.sort(['breaks'], ascending=[1])
现在这给了我正在寻找排名的数据框。但是我可以这样列出一个列表:
breaks = df['breaks'].tolist()
但是我找不到将索引值导出为列表的方法?有关如何做到这一点的任何想法?或者更好的方法来解决我的问题?
什么
答案 0 :(得分:2)
没有大熊猫的尝试,
breaks,speakers = map(list,zip(*sorted(zip(breaks,speakers))))
<强>执行强>,
speakers = ['S0\n', 'S0\n', 'S0\n', 'S1\n']
breaks = [0.86, 10.31, 22.43, 5.83]
breaks,speakers = map(list,zip(*sorted(zip(breaks,speakers))))
<强>结果强>
In [4]: speakers
Out[4]: ['S0\n', 'S1\n', 'S0\n', 'S0\n']
In [5]: breaks
Out[5]: [0.86, 5.83, 10.31, 22.43]
使用pandas
import pandas as pd
df = pd.DataFrame()
df['speakers'] = speakers
df['breaks'] = breaks
df = df.sort(['breaks'], ascending=[1])
speakers = df['speakers'].tolist()
breaks = df['breaks'].tolist()
<强>结果强>
print speakers,breaks
['S0\n', 'S1\n', 'S0\n', 'S0\n'] [0.86, 5.83, 10.31, 22.43]
答案 1 :(得分:1)
如何使用一个班轮而不使用熊猫?
zip(*sorted(zip(speakers, breaks), key=lambda x: x[1]))
也会试图想出一只大熊猫
答案 2 :(得分:1)
压缩它们,对它们进行排序,然后将它们解压缩。请参阅zip documentation。
>>> breaks2, speakers2 = zip(*sorted(zip(breaks, speakers)))
>>> breaks2
(0.86, 5.83, 10.31, 22.43)
>>> speakers2
('S0\n', 'S1\n', 'S0\n', 'S0\n')
编辑:哇,三个几乎相同,接近同时的答案。这个和另外两个之间的区别在于它们压缩(speakers, breaks)
然后按元组中的第二个元素排序,而这个由(breaks, speakers)
拉链并使用默认排序,它将按第一个元素排序如果有两个相同的breaks
值,则在元组(speakers
)中然后是第二个(breaks
)。