【问题标题】:Find intersection of two columns in Python Pandas -> list of strings在 Python Pandas 中查找两列的交集 -> 字符串列表
【发布时间】:2018-09-22 14:09:50
【问题描述】:

我想计算 A 列和 B 列有多少实例相交。 A 列和 B 列中的行是字符串列表。 例如,A 列可能包含 [汽车、乘客、卡车],而 B 列可能包含 [汽车、房屋、花、卡车]。由于在这种情况下,2 个字符串重叠,C 列应该显示 -> 2

我已经尝试过(这些都不起作用):

df['unique'] = np.unique(frame[['colA', 'colB']])

def unique(colA, colB):
    unique1 = list(set(colA) & set(colB))
    return unique1

df['unique'] = df.apply(unique, args=(df['colA'], frame['colB']))

TypeError: ('unique() 接受 2 个位置参数,但给出了 3 个','发生在索引文章')

【问题讨论】:

  • minimal reproducible example 请提供可重现的代码示例?
  • 您希望我添加什么?我使用了上面的代码并提供了错误。

标签: python list pandas unique


【解决方案1】:

我认为列表理解中需要lengthset.intersection

df['C'] = [len(set(a).intersection(b)) for a, b in zip(df.A, df.B)]

或者:

df['C'] = [len(set(a) & set(b)) for a, b in zip(df.A, df.B)]

示例

df = pd.DataFrame(data={'A':[['car', 'passenger', 'truck'], ['car', 'truck']],
                        'B':[['car', 'house', 'flower', 'truck'], ['car', 'house']]})
print (df)
                         A                            B
0  [car, passenger, truck]  [car, house, flower, truck]
1             [car, truck]                 [car, house]

df['C'] = [len(set(a).intersection(b)) for a, b in zip(df.A, df.B)]
print (df)
                         A                            B  C
0  [car, passenger, truck]  [car, house, flower, truck]  2
1             [car, truck]                 [car, house]  1

【讨论】:

  • 嗨@jezrael,我正在探索您的解决方案并且在功能上它有效。但是在大数据帧上,对于我的用例来说还不够快。我是 Pandas 的新手,所以你认为有可能通过一些数据操作来加快速度吗?我正在考虑转换 Series of Series 中的列表( stack_query_time_categorical = only_categorical['A'].apply(pd.Series).stack().astype('category') )但是我正在努力计算它们之间的交集对于所有值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2015-08-03
  • 2021-10-12
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多