Python 基于列名对数据进行分组

Python 基于列名对数据进行分组,python,pandas,Python,Pandas,在下面的示例中,我想首先根据UID排序,然后根据每个TID的TSTAMP进行排序 在这种情况下,以下是我生成的一个最简单的工作示例: df = pd.read_csv(dataset_path, names = ['TID','UID','TSTAMP'], delimiter=';') df = df.sort_values(by=['TID'], ascending=[True]) print df #print df.groupby('UID').describe() 但是,这并不是我们

在下面的示例中,我想首先根据UID排序,然后根据每个TID的TSTAMP进行排序

在这种情况下,以下是我生成的一个最简单的工作示例:

df = pd.read_csv(dataset_path, names = ['TID','UID','TSTAMP'], delimiter=';')
df = df.sort_values(by=['TID'], ascending=[True])
print df
#print df.groupby('UID').describe()
但是,这并不是我们想要的排序方式

       TID   UID         TSTAMP
22267   77  (!?}  1494417075666
9095    77  U|X^  1494415815098
15266   77  ~Mb{  1494416401082
15263   77  ~Mb{  1494416401061
15255   77  Qh9~  1494416398799
15252   77  Qh9~  1494416398786
15239   77  xF#u  1494416397542
15236   77  xF#u  1494416397540
9105    77  U|X^  1494415815197
最终的结果是这样的:

     TID      UID           TSTAMP
22267   77   (!?}   1494417075666
15263   77   ~Mb{   1494416401061
15266   77   ~Mb{   1494416401082
15252   77   Qh9~   1494416398786
15255   77   Qh9~   1494416398799
9095    77   U|X^   1494415815098
9105    77   U|X^   1494415815197
15236   77   xF#u   1494416397540
15239   77   xF#u   1494416397542
我是一只正在学习的熊猫。。任何帮助都将不胜感激

感谢@jezrael,这里是最终的解决方案

df = pd.read_csv(dataset_path, names = ['TID','UID','TSTAMP'], delimiter=';')
df = df.sort_values(['TID', 'TSTAMP', 'UID'], ascending=[True, False, True])
d = {'min':'TSTAMP-INIT','max':'TSTAMP-FIN'}
df = df.groupby(['UID','TID'])['TSTAMP'].agg([min, max]).reset_index().rename(columns=d)

for i, row in df.T.iteritems():
    print row
看来你需要:

如果第一列不是必需的排序,请忽略它:

df = df.sort_values(['TSTAMP', 'UID'], ascending=[False, True])
print (df)
       TID   UID         TSTAMP
22267   77  (!?}  1494417075666
15266   77  ~Mb{  1494416401082
15263   77  ~Mb{  1494416401061
15255   77  Qh9~  1494416398799
15252   77  Qh9~  1494416398786
15239   77  xF#u  1494416397542
15236   77  xF#u  1494416397540
9105    77  U|X^  1494415815197
9095    77  U|X^  1494415815098
看来你需要:

如果第一列不是必需的排序,请忽略它:

df = df.sort_values(['TSTAMP', 'UID'], ascending=[False, True])
print (df)
       TID   UID         TSTAMP
22267   77  (!?}  1494417075666
15266   77  ~Mb{  1494416401082
15263   77  ~Mb{  1494416401061
15255   77  Qh9~  1494416398799
15252   77  Qh9~  1494416398786
15239   77  xF#u  1494416397542
15236   77  xF#u  1494416397540
9105    77  U|X^  1494415815197
9095    77  U|X^  1494415815098

我更详细地介绍了结果应该是什么样子。。description()为我提供了很多我不确定第一列排序所必需的详细信息,如果需要
升序=[True,False,True]
升序=[False,False,True]
。是否有方法获取给定UID的第一个TSTAMP和同一UID的最后一个TSTAMP?例如,对于
~Mb{
149441641082
149441641061
是的,当然可以。给我一点时间。我刚才发布了答案-检查一下。只需要
df=df.groupby('UID')['TSTAMP'].agg([min,max])。重置索引()。重命名(columns=d)
我给出了一点关于结果应该是什么样的详细信息..描述()我不确定第一列的排序,如果需要
升序=[True,False,True]
升序=[False,False,True]
,有没有办法获取给定UID的第一个TSTAMP和同一UID的最后一个TSTAMP?例如,
~Mb{
149441641082
149441641061
是的,当然。给我一点时间。我刚才发布了答案-检查一下。只需要
df=df.groupby('UID')['TSTAMP'].agg([min,max])。重置索引()。重命名(columns=d)