簡體   English   中英

根據另一列中的條件選擇兩列中的值(Python)

[英]Selecting values in two columns based on conditions in another column (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”循環是否可行? 我對此感到有些困惑,因為這是我第一次處理此類問題,因此不勝感激。 謝謝!

嘗試這個:

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

我得到零的 position 並在循環中使用它們:

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)

這段代碼所做的是根據零的位置(df['number'] == 0)拆分您的 DataFrame 。 你終於得到了一個 DataFrames 列表,所以你可以對它們做任何你想做的事情。

如果零是每個案例的開始,那么您可以遍歷 number==0 的每個實例。 確保數字列不是 dataframe 的索引。

start_idx = df[df.number==0].index
cases = []    
for start,end in zip(start_idx[:-1], start_idx[1:]):
        cases.append(df.iloc[start:end])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM