比较List和获取python中的索引

时间:2016-05-27 11:27:56

标签: python python-2.7 pandas anaconda

我有一个数据框A['name', 'frequency']和一个名为'name'的列表B.两者都很长。 B比我每天都要小。我必须检查在DataFrame中是否有'name'的B元素。 A['name']如果它存在,我必须每次在B中出现时更新数据框中'name'的频率,如果B有一些新元素,我必须将其作为DataFrame A中的新行添加频率我必须在python 2.7中完成它。谢谢 A是我的mac_list,就像这样

mac_list.iloc[0:6]
Out[59]: 
mac_address  frequency
0  20c9d0892feb          2
1  28e34789c4c2          1
2  3480b3d51d5f          1
3  4480ebb4e28c          1
4  4c60de5dad72          1
5  4ca56dab4550          1

和B是我的new_mac_list,就像这样

['20c9d0892feb' '3480b3d51d5f' '20c9d0892feb' '249cji39fj4g']

我想要一个mac_list的输出,如

mac_address  frequency
0  20c9d0892feb          4
1  28e34789c4c2          1
2  3480b3d51d5f          2
3  4480ebb4e28c          1
4  4c60de5dad72          1
5  4ca56dab4550          1
6  249cji39fj4g          1

我试过这个

b = mac_list['mac_address'].isin(new_mac_list)
b=list(b)
for i in range(len(b)):
    if b[i]==True:
        mac_list['frequency'].iloc[i]+=1

更新频率但问题是频率增加1,即使在new_mac_list中出现超过1

我用它来插入新元素

c = new_mac_list.isin(mac_list['mac_address'])
c=list(c)
    for i in range(len(c)):
        if c[i]==False:
            mac_list.append(new_mac_list[i],1)

但这种效率非常低,我猜这可以通过仅比较一次来完成。

2 个答案:

答案 0 :(得分:2)

这是初始数据框:

mac_list

    mac_address  frequency
0  20c9d0892feb          2
1  28e34789c4c2          1
2  3480b3d51d5f          1
3  4480ebb4e28c          1
4  4c60de5dad72          1
5  4ca56dab4550          1

新名单:

new_mac_list = ['20c9d0892feb', '3480b3d51d5f', '20c9d0892feb', '249cji39fj4g']

我首先将mac_list的索引设置为mac_address:

mac_list = mac_list.set_index("mac_address")

然后计算新列表中的频率:

new_freq = pd.Series(new_mac_list).value_counts()

然后,您可以在该系列中使用add方法:

res = mac_list["frequency"].add(new_freq, fill_value=0)

20c9d0892feb    4.0
249cji39fj4g    1.0
28e34789c4c2    1.0
3480b3d51d5f    2.0
4480ebb4e28c    1.0
4c60de5dad72    1.0
4ca56dab4550    1.0
dtype: float64

返回原始格式:

mac_list = pd.DataFrame(res, columns = ["frequency"])
print(mac_list)

              frequency
20c9d0892feb        4.0
249cji39fj4g        1.0
28e34789c4c2        1.0
3480b3d51d5f        2.0
4480ebb4e28c        1.0
4c60de5dad72        1.0
4ca56dab4550        1.0

答案 1 :(得分:0)

创建索引

如果你谈论效率,那么首先要考虑的是指数。 我假设mac地址是唯一的。

A = A.set_index("mac_address")

并访问项目

A.loc[i]

B上的迭代具有较小的相关性