当前位置: 首页 > 面试题库 >

在熊猫中设置联盟

饶志
2023-03-14
问题内容

我有两列,将集存储在数据框中。

我想使用快速向量化操作在两列上执行集合并集

df['union'] = df.set1 | df.set2

但是错误TypeError: unsupported operand type(s) for |: 'set' and 'bool'使我无法这样做,因为我np.nan在两列中都输入了内容。

有解决这个问题的好方法吗?


问题答案:

对于这些操作,纯Python可能更有效。

%timeit pd.Series([set1.union(set2) for set1, set2 in zip(df['A'], df['B'])])
10 loops, best of 3: 43.3 ms per loop

%timeit df.apply(lambda x: x.A.union(x.B), axis=1)
1 loop, best of 3: 2.6 s per loop

如果我们可以使用+,则可能会花费一半的时间(继承可能不值得):

%timeit df['A'] - df['B']
10 loops, best of 3: 22.1 ms per loop

%timeit pd.Series([set1.difference(set2) for set1, set2 in zip(df['A'], df['B'])])
10 loops, best of 3: 35.7 ms per loop

时序的DataFrame:

import pandas as pd
import numpy as np
l1 = [set(np.random.choice(list('abcdefg'), np.random.randint(1, 5))) for _ in range(100000)]
l2 = [set(np.random.choice(list('abcdefg'), np.random.randint(1, 5))) for _ in range(100000)]

df = pd.DataFrame({'A': l1, 'B': l2})


 类似资料:
  • 问题内容: 我这样制作数据框。 我想通过使用一些熊猫方法将索引转换为此(例如set_index,stack 、、) 我怎样才能做到这一点? 问题答案: 我认为你需要与重塑,然后交换在水平由列由去年的排序列: 用另一种解决方案和:

  • 问题内容: 假设我用两列(一个DateTime)和一个(整数)创建了一个熊猫DataFrame 。现在,我想根据第一列()中的值创建一个DatetimeIndex : 一切似乎都正常,除了我打印DataFrame时,它说它具有Int64Index。 我是在做错事还是不正确理解Indeces的概念? 问题答案: 没有就位(除非您通过)。否则一切正确 同样作为参考,在即将到来的0.12版本(下周)中,

  • 我想用替换大于任意数字(本例中为100)的

  • 查看以下: 问题是它不会在ipython笔记本中按默认值打印所有行,但我必须切片才能查看结果行。即使以下选项也不会更改输出: 有人知道如何显示整个阵列吗?

  • 我试图在将数据帧与另一个数据帧合并后更改数据帧中的值,并遇到一些问题(在合并之前似乎不是问题)。 我正在索引和更改数据帧中的值: 随后,我使用merge连接了两个索引(左外连接)(我意识到left.join(右)也可以)。此后,当我使用iloc执行相同的值分配时,我收到以下警告: 对链接文档的审查不会澄清理解,因此,我是否使用了错误的iloc切片方法?(请记住,出于代码的目的,我需要基于位置的切片

  • 问题内容: 有没有一种方法可以根据我的个人喜好(即不按字母或数字排序,而是更像遵循某些约定)对熊猫数据框中的列进行重新排序? 简单的例子: 产生这个: 但是,我想这样: (请提供通用解决方案,而不是针对此情况。非常感谢。) 问题答案: 只需输入列名称即可自己选择订单。请注意双括号: