2013-02-28 158 views
1

我刚刚发现了熊猫的力量。 (!感谢韦斯麦金尼)我有一个包含以下信息的CSV:使用pandas返回排序行的索引值?

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 

通常情况下,我不使用熊猫这个过程。我使用csv库来生成一个列表。使用日期时间库转换它们。然后,我通过每个线路回路和运行像下面让每一行的分类指数:

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

然后返回这样的事情每一行:

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

我然后我将其添加在每行的结尾处作为我csv中的新字段。

我可以将csv读入熊猫并将项目转换为日期dtype。我只是不确定如何去使用熊猫获取排序后的索引值,然后将它们压扁成一个字符串并将它们放入列中?最受赞赏的任何帮助!

回答

5

您可以使用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 
+0

谢谢!这让我朝着正确的方向前进。我不想写出来,而是想将它添加到列中。但是,我想出了下面的代码似乎工作。 df ['AL_SQ'] = [''''','。join(row)+'“'for idx [idx.columns] .astype('str')。values] – BigHandsome 2013-02-28 14:56:04

+0

您可以获得一个字符串串:'idx.​​apply(lambda s:“,”。join(s.astype(str)),axis = 1)'或'buf.getvalue()。split(“\ n”)'得到字符串列表。 – HYRY 2013-02-28 22:23:01