我正在迭代一个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列添加值的情况)?
答案 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}