【发布时间】:2018-12-03 12:24:07
【问题描述】:
我的 df 看起来像:
Name Item
A,D,B,B,C,C I1,I2,I3,I1,I2
X,Y,Z,Z,Z I4,I1,I1,I88,I4
预期输出:
Name Item Unique_Name Unique_Item Count_Unique_name Count_Unique_Item
A,D,B,B,C,C I1,I2,I3,I1,I2 A,B,C,D I1,I2,I3 4 3
X,Y,Z,Z,Z I4,I1,I1,I88,I4 X,Y,Z I4,I1,I88 3 4
代码:
new_items_df['Unique_Name'] = new_items_df['Name'].apply(lambda x: set(x.lower().split(",")))
new_items_df['Unique_Item'] = new_items_df['Item'].apply(lambda x: set(x.lower().split(",")))
new_items_df['Count_Unique_Name'] = new_items_df['Unique_Modifier'].apply(lambda x: len(x))
new_items_df['Count_Unique_Item'] = new_items_df['Unique_Item'].apply(lambda x: len(x))
上面的代码工作正常,但我正在执行相同的操作并运行相同的代码两次。当我尝试合并第一两行代码时,如下所示:
new_items_df[['Unique_Name','Unique_Item']] = new_items_df[['Name','Item']].apply(lambda x: set(x.str.lower().str.split(",")),axis =1)
TypeError: ("unhashable type: 'list'", '发生在索引 0')
我尝试使用 .unique()also,尝试使用 [] 将其转换为列表,但似乎没有任何效果,我遇到了一个或另一个错误
总结:
那么,我可以将我的 4 行代码合并为 1 行吗?
【问题讨论】:
-
D是如何输出的? -
是的,现在编辑了
-
我认为您可以在 apply 中删除axis =1
-
为这样的操作编写一个函数总是更好。
标签: python pandas lambda apply