将索引值导出为列表

时间:2017-05-16 07:15:36

标签: python

我有两个列表如下:

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()

但是我找不到将索引值导出为列表的方法?有关如何做到这一点的任何想法?或者更好的方法来解决我的问题?

什么

3 个答案:

答案 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)。