
[英]Find index location of first and last occurrence of a value per day in a Pandas DataFrame with a DateTime index
[英]Find index location of first occurrence of a specific partial string in pandas dataframe
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我正在使用AFRINIC Whois数据。 我正在尝试查找第一次出现的子字符串的位置。 在示例中(熊猫数据框的左侧有一列“数据”是索引),我试图找到子字符串“ inetnum”。 因此,我正在寻找的结果是“ 2750383”。
data
20 mnt-lower: info
21 changed: info
22 changed: info
23 changed: info
24 changed: info
25 source: info
26 as-block: info
27 type: info
28 descr: info
29 remarks: info
... ...
2750381 changed: info
2750382 source: info
2750383 inetnum: info
2750384 netname: info
2750385 descr: info
2750386 country: info
2750387 admin-c: info
2750388 tech-c: info
2750389 status: info
我努力了:
afrinic.data.ne('inetnum').idxmax()
但这给了我“ []”,因为它正在寻找第一个完整的字符串并产生0个结果。
我也尝试过:
indices = [i for i, s in enumerate(afrinic.data) if 'inetnum' in s]
但这给了我单词“ inetnum”的每个索引号,而我要查找的只是第一个实例索引号。 我可以列出该列表,而仅使用头号,但是必须有一种更好的方法来做到这一点。 任何帮助是极大的赞赏。
使用str.contains
在任何位置进行检查:
out = afrinic.data.str.contains('inetnum').idxmax()
print (out)
2750383
或str.startswith
用于测试每个字符串的开始:
out = afrinic.data.str.startswith('inetnum').idxmax()
编辑:
如果没有匹配的值,更通用的解决方案:
m = afrinic.data.str.contains('inetnum')
out = m.idxmax() if m.any() else 'no match'
你很亲密 将next
与生成器表达式一起使用:
first_index = next((i for i, s in enumerate(afrinic.data) if 'inetnum' in s), None)
如果找不到有效的索引,则next
会根据fallback参数返回None
。
对于较大的数据框(希望在系列开头附近进行匹配),将next
与手动迭代配合使用将比基于Pandas / NumPy的方法更有效。 否则,您可以按照@jezrael的解决方案使用pd.Series.str
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.