Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 Dataframe-对列中每行的值列表进行排序_Pandas_List_Dataframe_Sorting - Fatal编程技术网

Pandas Dataframe-对列中每行的值列表进行排序

Pandas Dataframe-对列中每行的值列表进行排序,pandas,list,dataframe,sorting,Pandas,List,Dataframe,Sorting,以下是一个数据帧: dt name type City 05-10-2021 MK [PQRRC, MNXYZ, AYPIC, KLUYT, GFTBE, BYPAC] NYC 05-10-2021 MK [GFTBE, AYPIC, MNXYZ, BYPAC, KLUYT, PQRRC] NYC 05-12-2021

以下是一个数据帧:

dt          name  type                                         City                            
05-10-2021  MK    [PQRRC, MNXYZ, AYPIC, KLUYT, GFTBE, BYPAC]   NYC
05-10-2021  MK    [GFTBE, AYPIC, MNXYZ, BYPAC, KLUYT, PQRRC]   NYC
05-12-2021  MK    [KLUYT, PQRRC, BYPAC, AYPIC, GFTBE, MNXYZ]   NYC
05-12-2021  MK    [BYPAC, KLUYT, GFTBE, AYPIC, MNXYZ, PQRRC]   NYC
05-13-2021  PS    [XYDFE, QRTSL, CPQLE, VXWUT, ORSHC, LTRDX]   BAL
05-13-2021  PS    [VXWUT, ORSHC, QRTSL, XYDFE, LTRDX, CPQLE]   BAL
。。。。 请注意,每个列名的列类型中的值列表相同,但未按字母顺序排序

我希望输出如下:对列类型进行排序,并找到不同的dt、name、type、City

dt          name  type                                         City                            
05-10-2021  MK    [AYPIC, BYPAC, GFTBE, KLUYT, MNXYZ, PQRRC]   NYC
05-12-2021  MK    [AYPIC, BYPAC, GFTBE, KLUYT, MNXYZ, PQRRC]   NYC
05-13-2021  PS    [CPQLE, LTRDX, ORSHC, QRTSL, VXWUT, XYDFE]   BAL
我尝试使用sort\u值、排序、删除重复项;不工作。可能是我犯了一些错误。它会删除一些名称,这意味着在使用drop_duplicates()时会丢失一些名称。有人能帮我吗?谢谢。

请尝试以下方法:

df[“type”]=df[“type”].apply(lambda x:sorted(list(x)))

这假设列“type”的所有值都是列表

如果要对列
type
中的列表进行排序并删除基于其他列检查的重复项,可以使用对列表进行排序,然后使用检查其他列上的重复项:

使用numpy.sort()比类似的Python处理更高效,因为numpy模块针对系统性能进行了优化,并且对于panda和numpy列表/数组运行更快。

import numpy as np

# in case your column "type" is of string type, run one of the following line (depending on your string list layout):
# use this for string list layout e.g. "['GFTBE', 'AYPIC', 'MNXYZ', 'BYPAC', 'KLUYT', 'PQRRC']"
df['type'] = df['type'].str.strip("[]").str.replace("'", "").str.split(', ')   
#df['type'] = df['type'].map(eval)    # for general use to convert string like a list to a real list
#df['type'] = df['type'].str.strip('[]').str.split(',')  # for use when no extra spaces and extra single quotes  


df['type'] = df['type'].map(np.sort).map(list)   # convert the sorted numpy array to Python list to avoid incorrect formatting (e.g. missing comma) in writing to CSV 
df = df.drop_duplicates(subset=['dt', 'name', 'City'])
结果:

print(df)

           dt name                                        type City
0  05-10-2021   MK  [AYPIC, BYPAC, GFTBE, KLUYT, MNXYZ, PQRRC]  NYC
2  05-12-2021   MK  [AYPIC, BYPAC, GFTBE, KLUYT, MNXYZ, PQRRC]  NYC
4  05-13-2021   PS  [CPQLE, LTRDX, ORSHC, QRTSL, VXWUT, XYDFE]  BAL


列表是否保证具有相同的值,或者是否需要逻辑将列表合并在一起?示例数据似乎存在一些问题。前两个列表是不同的。第二个有2个
AYPIC
我们是否也需要检查列
类型的副本?似乎需要,对吗?对于每个列“名称”,列“类型”中的值列表是相同的,但没有按顺序排序。谢谢。对不起,更正了样本数据。无需检查“类型”列中的值列表中是否存在重复项。只需对其排序并选择不同的值,如示例输出中所示。您好,谢谢…我尝试了您的代码,得到的结果是:df.type.head()0[,,,,,,]…出现了一些问题。缺少值。df[“type”]=df[“type”].map(lambda x:sorted(list(x)))的工作方式与df['type']=df['type'].map(np.sort).map(list)的工作方式相同。谢谢。获取值错误:轴(=-1)超出范围。@Murali哪一行获取了错误?第一行还是第二行?列
type
中的列表是真正定义为列表还是像列表一样编写的字符串?获取ValueError:axis(--1)超出第一行的界限:df['type']=df['type'].map(np.sort)@Murali在两行前面添加行
df['type']=df['type'].str.strip('[]').str.split(',')
,然后重试。谢谢是的,谢谢,海豆。