首页 > 解决方案 > 根据另一列中的条件选择两列中的值(Python)

问题描述

编辑:有人删除了他的答案。不知道为什么,因为它很有用。

抱歉,如果之前有人问过这个问题,我没有找到解决方案来帮助我解决这个问题。

我有一个包含不同变量的表,但我有兴趣在给定这些条件的情况下仅过滤某些值:在我的表中,列“数字”从 0 开始直到 x,然后再从 0 开始直到另一个 x。为此,我想在单独的数据框中过滤掉 lon 和 lat。例如,对于第一个案例 0 到 5,我希望将 lon 和 lat 保存为“案例 1”,然后程序应该采用下一个 0 到 4 并将新的关联坐标打印到“案例 2”。这应该在所有情况下继续,直到到达“数字”列的末尾。

我的表示例:

number     lon(geo)     lat(geo)
0    -47     66
1    -45     66
2    -44     67
3    -41     67
4    -38     67
5    -37     67
0    -8      38
1    -7      39
2    -6      39
3    -5      40
4    -5      41
0    .        .
.    .        .

我尝试设置条件:

df = df[(df['number'] >= 0) & (df['number'] <= 0)]

最初,我想到了一个循环,中间有一些 break/next 或 continue 语句。

for i in range(1,len(number)):
    break    

while (float(i) for i in number > 0):
    lon = print (lon)
    lat = print (lat)
    break

我不确定“while True”循环是否可行?我对此感到有些困惑,因为这是我第一次处理此类问题,因此不胜感激。谢谢!

标签: pythonpandasloopsdataframeconditional-statements

解决方案


试试这个:

import pandas as pd

df = pd.read_csv('test1.csv', delimiter=";")
print(df)

这是我的测试 CSV(带有假lonlat值):

    number lon lat
0        0  a0  b0
1        1  a1  b1
2        2  a2  b2
3        3  a3  b3
4        4  a4  b4
5        0  a0  b0
6        1  a1  b1
7        2  a2  b2
8        3  a3  b3
9        4  a4  b4
10       5  a5  b5
11       0  a0  b0
12       1  a1  b1
13       2  a2  b2
14       3  a3  b3

我得到零的位置并在循环中使用它们:

zeros = df.index[df['number']==0].tolist()

new_dfs = []

for i in range(0,len(zeros)):
    try:
        df_aux = df.iloc[zeros[i]:zeros[i+1]]
    except:
        df_aux = df.iloc[zeros[i]:len(df)]
    
    new_dfs.append(df_aux)

这段代码所做的是根据 zeros 的位置拆分您的 DataFrame (df['number'] == 0)。你终于得到了一个 DataFrames 列表,所以你可以对它们做任何你想做的事情。


推荐阅读