Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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
Pandas 使用groupby和conditions对数据帧进行排序_Pandas_Pandas Groupby - Fatal编程技术网

Pandas 使用groupby和conditions对数据帧进行排序

Pandas 使用groupby和conditions对数据帧进行排序,pandas,pandas-groupby,Pandas,Pandas Groupby,我试图根据满足条件的组对数据帧进行排序 我在对组进行排序时遇到语法错误。 在尝试上述操作之前,我丢失了数据帧的初始顺序 这是我试图实现的排序顺序: 1) 对第一列和测试列进行排序 2) Test==1组,按次列排序,然后按最后一列排序 ---Test==0组,仅按最后一列排序 import pandas as pd df=pd.DataFrame({"First":[100,100,100,100,100,100,200,200,200,200,200],"Test":[1,1,1,0,0,0

我试图根据满足条件的组对数据帧进行排序

我在对组进行排序时遇到语法错误。 在尝试上述操作之前,我丢失了数据帧的初始顺序

这是我试图实现的排序顺序:

1) 对第一列和测试列进行排序

2) Test==1组,按次列排序,然后按最后一列排序

---Test==0组,仅按最后一列排序

import pandas as pd

df=pd.DataFrame({"First":[100,100,100,100,100,100,200,200,200,200,200],"Test":[1,1,1,0,0,0,0,1,1,1,0],"Secondary":[.1,.1,.1,.2,.2,.3,.3,.3,.3,.4,.4],"Final":[1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10,11.11]})

def sorter(x):
    if x["Test"]==1:
        x.sort_values(['Secondary','Final'], inplace=True)
    else:
        x=x.sort_values('Final', inplace=True)


df=df.sort_values(["First","Test"],ascending=[False, False]).reset_index(drop=True)


df.groupby(['First','Test']).apply(lambda x: sorter(x))

df


您可以尝试在没有groupby的情况下按降序排序, w、 你给的r.t序列,排序顺序会改变。对你有用吗

df=pd.DataFrame({"First":[100,100,100,100,100,100,200,200,200,200,200],"Test":[1,1,1,0,0,0,0,1,1,1,0],"Secondary":[.1,.5,.1,.9,.4,.1,.3,.3,.3,.4,.4],"Final":[1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10,11.11]})

df = df.groupby(['First','Test']).apply(lambda x: x.sort_values(['First','Test','Secondary','Final'],ascending=False) if x.iloc[0]['Test']==1 else x.sort_values(['First','Test','Final'],ascending=False)).reset_index(drop=True)
df.sort_values(['First','Test'],ascending=[True,False])
输出:


诀窍是分别对子集进行排序,并替换原始df中的值。 这在熊猫排序问题的其他解决方案中出现

import pandas as pd


df=pd.DataFrame({"First":[100,100,100,100,100,100,200,200,200,200,200],"Test":[1,1,1,0,0,0,0,1,1,1,0],"Secondary":[.1,.5,.1,.9,.4,.1,.3,.3,.3,.4,.4],"Final":[1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10,11.11]})

df.sort_values(['First','Test','Secondary','Final'],ascending=False, inplace=True)

index_subset=df[df["Test"]==0].index
sorted_subset=df[df["Test"]==0].sort_values(['First','Final'],ascending=False)

df.loc[index_subset,:]=sorted_subset.values

print(df)

测试中除了一个值之外,还有其他值吗?如果不是的话,我认为下面的答案应该行得通。我在代码中尝试使用不同的方法的原因是,第二列应该在Test==1时起作用,而在Test==0时应该忽略。该解决方案不适用于稍微修改过的数据帧df=pd.DataFrame({“第一”:[100100200200],“测试”:[1,1,1,0,0,0,0,1,1,1,1,1,1,0,0],“第二”:[1,5,1,1,9,4,1,3,3,3,3,3,3,4],“最终”:[1.1,2.2,3,4,5.5,6,7.7,8.8,9,10.10,11]),有没有办法修改代码以避免语法错误?谢谢@Kdog,我刚刚合并了更改:-)
    Final   First   Secondary   Test
3   2.20    100 0.5 1
4   3.30    100 0.1 1
5   1.10    100 0.1 1
0   6.60    100 0.1 0
1   5.50    100 0.4 0
2   4.40    100 0.9 0
8   10.10   200 0.4 1
9   9.90    200 0.3 1
10  8.80    200 0.3 1
6   11.11   200 0.4 0
7   7.70    200 0.3 0
import pandas as pd


df=pd.DataFrame({"First":[100,100,100,100,100,100,200,200,200,200,200],"Test":[1,1,1,0,0,0,0,1,1,1,0],"Secondary":[.1,.5,.1,.9,.4,.1,.3,.3,.3,.4,.4],"Final":[1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10,11.11]})

df.sort_values(['First','Test','Secondary','Final'],ascending=False, inplace=True)

index_subset=df[df["Test"]==0].index
sorted_subset=df[df["Test"]==0].sort_values(['First','Final'],ascending=False)

df.loc[index_subset,:]=sorted_subset.values

print(df)