是否可以计算方法链中的一行和前一行之间的列表列中的公共项的数量?我下面的代码抛出错误 'TypeError: unhashable type: 'list''
import pandas as pd
df = pd.DataFrame({
'x':[1,2,3,4],
'list_column': [
['apple', 'banana', 'cherry'],
['banana', 'cherry'],
['cherry', 'date', 'fig'],
['orange']
]
})
res = len(set(df.loc[1,'list_column']) & set(df.loc[0,'list_column']))
res
df=(df
.assign(
list_length=lambda x: x['list_column'].str.len(),
nr_common=lambda x: (set(x['list_column']) & set(x['list_column'].shift(1))).len()
)
)
df
我首先将所有列表转换为集合,然后使用
diff
:输出:
如果您不需要中间体:
或者使用自定义函数:
这种方法将更多的工作转移到 pandas 上,同时
apply
主要使用 Python。根据实际数据,它可能会更快或更慢:印刷:
x_x
和x_y
是两个比较行的“x”值。没有共同项目的行将被省略。对的,这是可能的。这是一种方法。