Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 按列中的名称对数据帧中的数据进行排序_Sorting_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Sorting 按列中的名称对数据帧中的数据进行排序

Sorting 按列中的名称对数据帧中的数据进行排序,sorting,python-3.x,pandas,dataframe,Sorting,Python 3.x,Pandas,Dataframe,嗨,我在熊猫数据框中排序一些数据时遇到问题。数据的格式与我习惯的不同,我不知道如何使它工作。我要排序的数据采用以下格式: [['2016-05-23', 'name1', 'data1'], ['2016-05-23', 'name2', 'data2'], ['2016-05-24', 'name1', 'data1'], ['2016-05-24', 'name2', 'data2'], ['2016-05-25', 'name1', 'data1'], ['2016-05-25', 'na

嗨,我在熊猫数据框中排序一些数据时遇到问题。数据的格式与我习惯的不同,我不知道如何使它工作。我要排序的数据采用以下格式:

[['2016-05-23', 'name1', 'data1'],
['2016-05-23', 'name2', 'data2'],
['2016-05-24', 'name1', 'data1'],
['2016-05-24', 'name2', 'data2'],
['2016-05-25', 'name1', 'data1'],
['2016-05-25', 'name2', 'data2'],
['2016-05-26', 'name1', 'data1'],
['2016-05-26', 'name2', 'data2'],
['2016-05-27', 'name1', 'data1'],
['2016-05-27', 'name2', 'data2']]
我想做的是把它按日期分类,并把它的名字命名为ColumNames

[['2016-05-23, 'data1', 'data2'],
['2016-05-24', 'data1', 'data2'],
['2016-05-25', 'data1', 'data2'] and so on...]
如果可以使用一些特定的pandas命令来实现这一点,我还希望解决方案能够处理更多的内容,而不仅仅是两个name列。我不知道该怎么做,希望得到任何帮助。

我认为您需要:

然后,如果需要,例如按列
name1

import pandas as pd

df = pd.DataFrame([['2016-05-23', 'name1', 9],
['2016-05-23', 'name2', 4],
['2016-05-24', 'name1', 5],
['2016-05-24', 'name2', 1],
['2016-05-25', 'name1', 5],
['2016-05-25', 'name2', 7],
['2016-05-26', 'name1', 10],
['2016-05-26', 'name2', 7],
['2016-05-27', 'name1', 0],
['2016-05-27', 'name2', 1]], columns = ['a','b','c'])
print (df)
            a      b   c
0  2016-05-23  name1   9
1  2016-05-23  name2   4
2  2016-05-24  name1   5
3  2016-05-24  name2   1
4  2016-05-25  name1   5
5  2016-05-25  name2   7
6  2016-05-26  name1  10
7  2016-05-26  name2   7
8  2016-05-27  name1   0
9  2016-05-27  name2   1

print (df.pivot(index='a', columns='b', values='c').sort_values('name1'))
b           name1  name2
a                       
2016-05-27      0      1
2016-05-24      5      1
2016-05-25      5      7
2016-05-23      9      4
2016-05-26     10      7
有时
pivot
不起作用,然后使用:

但是
pivot\u表
使用
aggfunc
,默认值为
aggfunc=np。如果重复,则平均值为
。更好的解释与样品是和在


最后您可以和(在
pandas
0.18.0
中新增):


谢谢,这似乎很有效,有没有办法将其合并到新的数据帧中?我厌倦了在一个新的数据框中打印(df.pivot(index='a',columns='b',values='c')。sort_values('a'))以使其在日期上排序,但这不起作用,但是
a
是索引,它被排序了。。。如果没有,您可以使用
df1=df.pivot(index='a',columns='b',values='c')。reset_index()。sort_values('a')
我还添加了将字符串列a转换为datetime的代码,请参见编辑。很抱歉,是我写错了。它似乎工作得很好。谢谢你的接受。很高兴能帮助你!祝你好运
#convert column a to datetime
df['a'] = pd.to_datetime(df.a)

print (df.pivot(index='a', columns='b', values='c'))
b           name1  name2
a                       
2016-05-23  data1  data2
2016-05-24  data1  data2
2016-05-25  data1  data2
2016-05-26  data1  data2
2016-05-27  data1  data2
import pandas as pd

df = pd.DataFrame([['2016-05-23', 'name1', 9],
['2016-05-23', 'name2', 4],
['2016-05-24', 'name1', 5],
['2016-05-24', 'name2', 1],
['2016-05-25', 'name1', 5],
['2016-05-25', 'name2', 7],
['2016-05-26', 'name1', 10],
['2016-05-26', 'name2', 7],
['2016-05-27', 'name1', 0],
['2016-05-27', 'name2', 1]], columns = ['a','b','c'])
print (df)
            a      b   c
0  2016-05-23  name1   9
1  2016-05-23  name2   4
2  2016-05-24  name1   5
3  2016-05-24  name2   1
4  2016-05-25  name1   5
5  2016-05-25  name2   7
6  2016-05-26  name1  10
7  2016-05-26  name2   7
8  2016-05-27  name1   0
9  2016-05-27  name2   1

print (df.pivot(index='a', columns='b', values='c').sort_values('name1'))
b           name1  name2
a                       
2016-05-27      0      1
2016-05-24      5      1
2016-05-25      5      7
2016-05-23      9      4
2016-05-26     10      7
print (df.pivot_table(index='a', columns='b', values='c'))
print (df.pivot(index='a', columns='b', values='c')
         .reset_index()
         .rename_axis(None, axis=1))
            a  name1  name2
0  2016-05-23      9      4
1  2016-05-24      5      1
2  2016-05-25      5      7
3  2016-05-26     10      7
4  2016-05-27      0      1

#pandas bellow 0.18.0
df1 = df.pivot(index='a', columns='b', values='c').reset_index()
df1.columns.name = None
print (df1)
            a  name1  name2
0  2016-05-23      9      4
1  2016-05-24      5      1
2  2016-05-25      5      7
3  2016-05-26     10      7
4  2016-05-27      0      1