python - 使用 Pandas 返回排序行的索引值?

标签 python pandas

我最近才发现 Pandas 的力量。 (感谢 Wes McKinney!)我有一个包含以下信息的 csv:

RUN_START_DATE,PUSHUP_START_DATE,SITUP_START_DATE,PULLUP_START_DATE
2013-01-24,2013-01-02,2013-01-30,2013-02-03
2013-01-30,2013-01-21,2013-01-13,2013-01-06
2013-01-29,2013-01-28,2013-01-01,2013-01-29
2013-02-16,2013-02-12,2013-01-04,2013-02-11
2013-01-06,2013-02-07,2013-02-25,2013-02-12
2013-01-26,2013-01-28,2013-02-12,2013-01-10
2013-01-26,2013-02-10,2013-01-12,2013-01-30
2013-01-03,2013-01-24,2013-01-19,2013-01-02
2013-01-22,2013-01-13,2013-02-03,2013-02-05
2013-02-06,2013-01-16,2013-02-07,2013-01-11

通常,我不会在这个过程中使用 pandas。我使用 csv 库生成列表。使用日期时间库转换它们。然后我遍历每一行并运行类似下面的内容来获取每一行的排序索引:

'"' + ','.join(map(str, sorted(range(len(dates)), key=lambda k: dates[k]))) + '"'

然后它为每一行返回如下内容:

Out[40]: '"1,0,2,3"'

然后我将它添加到每一行的末尾作为我的 csv 中的一个新字段。

我可以将 csv 读入 pandas 并将项目转换为日期 dtype。我只是不确定如何使用 pandas 获取排序的索引值,然后将它们展平成一个字符串并将它们放入一个列中?非常感谢任何帮助!

最佳答案

您可以使用 numpy.argsort() 获取排序索引:

from StringIO import StringIO
import numpy as np
import pandas as pd

txt = """RUN_START_DATE,PUSHUP_START_DATE,SITUP_START_DATE,PULLUP_START_DATE
2013-01-24,2013-01-02,2013-01-30,2013-02-03
2013-01-30,2013-01-21,2013-01-13,2013-01-06
2013-01-29,2013-01-28,2013-01-01,2013-01-29
2013-02-16,2013-02-12,2013-01-04,2013-02-11
2013-01-06,2013-02-07,2013-02-25,2013-02-12
2013-01-26,2013-01-28,2013-02-12,2013-01-10
2013-01-26,2013-02-10,2013-01-12,2013-01-30
2013-01-03,2013-01-24,2013-01-19,2013-01-02
2013-01-22,2013-01-13,2013-02-03,2013-02-05
2013-02-06,2013-01-16,2013-02-07,2013-01-11"""
df = pd.read_csv(StringIO(txt))
idx = np.argsort(df, axis=1)
buf = StringIO()
idx.to_csv(buf, index=False, header=False)
print buf.getvalue()

输出:

1,0,2,3
3,2,1,0
2,1,0,3
2,3,1,0
0,1,3,2
3,0,1,2
2,0,3,1
3,0,2,1
1,0,2,3
3,1,0,2

关于python - 使用 Pandas 返回排序行的索引值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137877/

相关文章:

python - 如何从另一个数据帧中选择非空行并随机获取其索引

python - 为什么我的 Go 程序在以下场景中的性能比预期差很多?

Python 列表按组的大小排序

python - 决策树: Probability of prediction inversely proportional in python

Python,将电子邮件更改为名称格式

pandas - 查询带有Period数据类型的数据帧时Jupyter内核崩溃

python - HDF5 文件在覆盖 pandas 数据帧后变大

python - 如何用自定义字符串完全替换 pytest 输出以进行测试?

python - Django:如何仅获取与登录用户所属区域匹配的记录?

python - 第一行以 Pandas 为标题