有没有办法在一行中添加多个元素到python集?

时间:2015-12-08 09:33:06

标签: python pandas set

我正在迭代一个pandas数据帧,并希望从数据帧的多个列向一个集添加唯一元素。目前我这样做:

list_a = set([])
for i, row in df.iterrows():
    list_a.add(row.a)
    list_a.add(row.b)

我试过了:

list_a = set([])
for i, row in df.iterrows():
    list_a.add(row.a, row.b)

但它会导致以下错误消息:

TypeError: add() takes exactly one argument (2 given)

执行此操作的方式是否比我的方式更优雅(考虑有超过2列添加值的情况)?

3 个答案:

答案 0 :(得分:1)

您可以使用联合功能 - list_a = list_a.union([row.a, row.b])

有关python集文档的更多信息,请参见https://docs.python.org/2/library/sets.html

答案 1 :(得分:1)

您可以使用Union套:

list_a = set()
for i, row in df.iterrows():
    list_a |= {row.a, row.b}

答案 2 :(得分:1)

IIUC以下应该有效:

df[['a','b']].stack().unique()

示例:

In [60]:
df = pd.DataFrame({'a': [0,1,2,2,3], 'b':np.arange(5), 'c':[-1,2,2,54,6]})
df

Out[60]:
   a  b   c
0  0  0  -1
1  1  1   2
2  2  2   2
3  2  3  54
4  3  4   6

In [61]:    
df[['a','b']].stack().unique()

Out[61]:
array([0, 1, 2, 3, 4], dtype=int64)

如有必要,您可以投放到set

In [63]:
set(df[['a','b']].stack().unique())

Out[63]:
{0, 1, 2, 3, 4}