Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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
Python Groupby和Aggregate在列上使用list作为元素,并在列表中获取唯一值_Python_Pandas_Performance_Dataframe_Pandas Groupby - Fatal编程技术网

Python Groupby和Aggregate在列上使用list作为元素,并在列表中获取唯一值

Python Groupby和Aggregate在列上使用list作为元素,并在列表中获取唯一值,python,pandas,performance,dataframe,pandas-groupby,Python,Pandas,Performance,Dataframe,Pandas Groupby,我有以下数据帧 df = pd.DataFrame( { "id": [1, 2, 1, 3], "values": [[111, 121, 131], [211, 221, 281], [111, 191], [301, 321]], } ) # df id values 1 [111, 121, 131] 2 [211, 221, 281] 1 [111, 191] 3 [301, 32

我有以下数据帧

df = pd.DataFrame(
    {
        "id": [1, 2, 1, 3],
        "values": [[111, 121, 131], [211, 221, 281], [111, 191], [301, 321]],
    }
)
# df
id  values
1   [111, 121, 131]
2   [211, 221, 281]
1   [111, 191]
3   [301, 321]
我想在groupby和聚合步骤之后得到以下内容

id  values
1   [111, 121, 131, 191]
2   [211, 221, 281]
3   [301, 321]
我正在使用以下命令,但它给了我一个错误-

new_df = df.groupby(["id"]).agg({"values": lambda val: set(val)}).reset_index()

TypeError: unhashable type: 'list'
一种方法-

df.groupby('id')['values'].sum().apply(lambda x: list(set(x))).reset_index()
输出

    id  values
0   1   [191, 131, 121, 111]
1   2   [221, 211, 281]
2   3   [301, 321]

这应该有效

复制您的示例:

将熊猫作为pd导入
df=pd.DataFrame({'id':[1,2,1,3],'values':[111,121,131],[211,221,281],[111,191],[301,321]})
解决问题

df=df.groupby(by='id').sum()
df[['values']=df[['values']].applymap(lambda x:set(x))
输出

值
身份证件
1   {121, 131, 191, 111}
2   {281, 211, 221}
3   {321, 301}
您可以使用,然后在此处使用

df.explode('values').groupby('id')['values'].unique().reset_index()
    id  values
0   1   [191, 131, 121, 111]
1   2   [221, 211, 281]
2   3   [301, 321]