Python 聚合方法与lambda函数
我有一个数据帧Python 聚合方法与lambda函数,python,pandas,Python,Pandas,我有一个数据帧df,希望获得每个类的ID列表: import pandas as pd list1 = [[1, ('A', 'B', 'C')], [2, ('M', 'E', 'F')], [3, ('H', 'A', 'D')], [4, ('H', 'A', 'D')]] df = pd.DataFrame(list1, columns=['ID', 'Class']) df看起来像 ID Class 1 (A, B, C) 2 (M, E, F) 3
df
,希望获得每个类的ID
列表:
import pandas as pd
list1 = [[1, ('A', 'B', 'C')], [2, ('M', 'E', 'F')], [3, ('H', 'A', 'D')], [4, ('H', 'A', 'D')]]
df = pd.DataFrame(list1, columns=['ID', 'Class'])
df
看起来像
ID Class
1 (A, B, C)
2 (M, E, F)
3 (H, A, D)
4 (H, A, D)
所需输出为:
Class ID
(A, B, C) [1]
(M, E, F) [2]
(H, A, D) [3, 4]
我试图使用下面的代码,但它不起作用。谢谢
df.groupby('Class')['ID'].aggregate(lambda x: list(x))
你应该使用
df.groupby('Class').ID.agg(list).reset_index()
Out[473]:
Class ID
0 (A, B, C) [1]
1 (H, A, D) [3, 4]
2 (M, E, F) [2]
修复你的代码
df.groupby('Class')['ID'].aggregate(lambda x: x.tolist())
你应该使用
df.groupby('Class').ID.agg(list).reset_index()
Out[473]:
Class ID
0 (A, B, C) [1]
1 (H, A, D) [3, 4]
2 (M, E, F) [2]
修复你的代码
df.groupby('Class')['ID'].aggregate(lambda x: x.tolist())
这里有很多解决方案,其中一个:
df = df.groupby('Class')['ID'].apply(list).reset_index()
Class ID
0 (A, B, C) [1]
1 (H, A, D) [3, 4]
2 (M, E, F) [2]
这里有很多解决方案,其中一个:
df = df.groupby('Class')['ID'].apply(list).reset_index()
Class ID
0 (A, B, C) [1]
1 (H, A, D) [3, 4]
2 (M, E, F) [2]
lambda x:list(x)
相当于list
,但运行时开销更大。lambda x:list(x)
相当于list
,但运行时开销更大。嗨,Wenben,我收到一些错误消息。当我运行df.groupby('Class').ID.agg(list).reset_index()时,它会说TypeError:'type'对象不可编辑。当我运行df.groupby('Class')['ID'].aggregate(lambda x:x.tolist())时,它会说ValueError:名称的长度必须匹配多索引中的级别数。@SteveP确保这是元组还是列表?在列类Hi Wen Ben中,列类如(A,B,C)是元组。@SteveP如果它与您向我们显示的相同,我的查询应该可以工作Hi Wen Ben,我收到一些错误消息。当我运行df.groupby('Class').ID.agg(list).reset_index()时,它会说TypeError:'type'对象不可编辑。当我运行df.groupby('Class')['ID'].aggregate(lambda x:x.tolist())时,它会说ValueError:名称的长度必须匹配多索引中的级别数。@SteveP确保这是元组还是列表?列类Hi Wen Ben,列类如(A,B,C)是一个元组。@SteveP如果它与您向我们展示的相同,我的查询应该可以工作