首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中列表和获取索引的比较

python中列表和获取索引的比较
EN

Stack Overflow用户
提问于 2016-05-27 11:27:55
回答 2查看 115关注 0票数 2

我有一个dataframe A['name', 'frequency']和一个列表B 'name‘都是相当长的。B是小一点的,我每天都能得到。我必须检查DataFrame中是否存在B元素,即“名称”。A['name'],如果它在那里,我必须每次在B中更新数据中的“名称”的频率,如果B有一些新元素,我必须在dataframe A中添加一个频率为1的新行,我必须在python2.7中这样做。谢谢A我的mac_list是这样的吗?

代码语言:javascript
复制
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像这样

代码语言:javascript
复制
['20c9d0892feb' '3480b3d51d5f' '20c9d0892feb' '249cji39fj4g']

我想要一个mac_list的输出,比如

代码语言:javascript
复制
mac_address  frequency
0  20c9d0892feb          4
1  28e34789c4c2          1
2  3480b3d51d5f          2
3  4480ebb4e28c          1
4  4c60de5dad72          1
5  4ca56dab4550          1
6  249cji39fj4g          1

我试过这个

代码语言:javascript
复制
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

我用这个插入了新元素

代码语言:javascript
复制
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)

但这是非常低效的方式,我想这可以通过比较一次。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-27 12:54:56

这是最初的数据格式:

代码语言:javascript
复制
mac_list

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

新的名单:

代码语言:javascript
复制
new_mac_list = ['20c9d0892feb', '3480b3d51d5f', '20c9d0892feb', '249cji39fj4g']

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

代码语言:javascript
复制
mac_list = mac_list.set_index("mac_address")

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

代码语言:javascript
复制
new_freq = pd.Series(new_mac_list).value_counts()

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

代码语言:javascript
复制
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

回到原来的格式:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-05-27 13:04:43

创建索引

如果你谈论效率,指数是应该想到的第一件事。我想mac地址是独一无二的。

代码语言:javascript
复制
A = A.set_index("mac_address")

并访问这些项目

代码语言:javascript
复制
A.loc[i]

B上的迭代关系不大

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37482313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档