Python 3.x Python和Pandas,查找包含值的行,目标列有多组范围
我有一个凌乱的数据框,试图在Python 3.x Python和Pandas,查找包含值的行,目标列有多组范围,python-3.x,pandas,range,Python 3.x,Pandas,Range,我有一个凌乱的数据框,试图在ids列中“标记”包含某个数字的行。此列中的值表示包含的范围:例如,“第4行”包含以下数字: 240924102411241324142377237814781479148014811488214831484在“第0行”和“第1行”中,其中一组的范围是向后的(193119301929) 例如,如果我想知道哪些行具有包含“2340”和“1930”的集合,我将如何做到这一点?我认为需要一个循环,有时需要查询两个以上的数字。使用Python3.8 示例数据帧 x = ['1
ids
列中“标记”包含某个数字的行。此列中的值表示包含的范围:例如,“第4行”包含以下数字:
240924102411241324142377237814781479148014811488214831484在“第0行”和“第1行”中,其中一组的范围是向后的(193119301929) 例如,如果我想知道哪些行具有包含“2340”和“1930”的集合,我将如何做到这一点?我认为需要一个循环,有时需要查询两个以上的数字。使用Python3.8 示例数据帧
x = ['1331:1332,1552:1551,1931:1928,1965:1973,1831:1811,1927:1920',
'1331:1332,1552:1551,1931:1929,180:178,1966:1973,1831:1811,1927:1920',
'2340:2341,1142:1143,1594:1593,1597:1596,1310,1311',
'2339:2341,1142:1143,1594:1593,1597:1596,1310:1318,1977:1974',
'2409:2414,2377:2378,1478:1484',
'2474:2476',
]
y = [6.48,7.02,7.02,6.55,5.99,6.39,]
df = pd.DataFrame(list(zip(x, y)), columns =['ids', 'val'])
display(df)
所需的输出数据帧我将编写一个执行两个步骤的函数:
ids\u num\u list
query\u id
是否在ids\u num\u列表中
ids val n2340 n1930
0 1331:1332,1552:1551,1931:1928,1965:1973,1831:1... 6.48 0 1
1 1331:1332,1552:1551,1931:1929,180:178,1966:197... 7.02 0 1
2 2340:2341,1142:1143,1594:1593,1597:1596,1310,1311 7.02 1 0
3 2339:2341,1142:1143,1594:1593,1597:1596,1310:1... 6.55 1 0
4 2409:2414,2377:2378,1478:1484 5.99 0 0
5 2474:2476 6.39 0 0
我将编写一个执行两个步骤的函数:
ids\u num\u list
query\u id
是否在ids\u num\u列表中
ids val n2340 n1930
0 1331:1332,1552:1551,1931:1928,1965:1973,1831:1... 6.48 0 1
1 1331:1332,1552:1551,1931:1929,180:178,1966:197... 7.02 0 1
2 2340:2341,1142:1143,1594:1593,1597:1596,1310,1311 7.02 1 0
3 2339:2341,1142:1143,1594:1593,1597:1596,1310:1... 6.55 1 0
4 2409:2414,2377:2378,1478:1484 5.99 0 0
5 2474:2476 6.39 0 0
您可以使用apply或Values搜索每一行,您是在查找True还是False?如果找到这两个值,则为True?在此行中,您有
'2340:2341142:11431594:15931597:159613101311',
最后一个值的格式不同。这是正确的还是应该是一个:
您可以使用apply或values搜索每一行,您是在查找True还是False?如果找到这两个值,则为True?在此行中,您有'2340:2341142:11431594:15931597:159613101311',
最后一个值的格式不同。这是正确的还是应该是:
而不是将其存储到列表中,您可以直接检查,如果找到,则返回。如果int(query_id)在范围(int(lower)、int(upper)+1)内,请尝试:返回1
。else语句也是如此<代码>如果id\u range==query\u id:返回1。这样可以避免以后检查列表。当您退出for循环时,返回0而不是将其存储到列表中,您可以直接检查并在找到时返回。如果int(query_id)在范围(int(lower)、int(upper)+1)内,请尝试:返回1
。else语句也是如此<代码>如果id\u range==query\u id:返回1。这样可以避免以后检查列表。退出for循环后,返回0