簡體   English   中英

根據數據框中的 1 列選擇具有最高值的行

[英]Selecting rows with the highest value based on 1 column in the dataframe

我有一組大約有 20k 行的數據框。 帶有標題 X、Y、Z、I、R、G、B。 (是的,它的點雲)

我想通過在根據 X 列排序后將數據分組為 100 行來創建多個子數據框。隨后我想根據 Y 列對所有子數據框進行排序並將它們進一步分解為 50 行。(分解每個子數據幀進一步向下)最終結果是我應該有一組 50 行的子數據幀,我想挑選出每個子數據幀中 Z 值最高的所有行並將它們寫入 CSV 文件。

我已經用我的代碼達到了以下方法。 但我不確定如何進一步。

import pandas as pd
headings = ['x', 'y', 'z']
data = pd.read_table('file.csv', sep=',', skiprows=[0], names=headings)

points = data.sort_values(by=['x'])

考慮一個 1000 行的虛擬數據框,

df.head()   # first 5 rows

    X   Y   Z   I   R   G   B
0   6   6   0   3   7   0   2
1   0   8   3   6   5   9   7
2   8   9   7   3   0   4   5
3   9   6   8   5   1   0   0
4   9   0   3   0   9   2   9

首先,從數據框中提取Z最大值,

z_max = df['Z'].max()
df = df.sort_values('X')

# list of dataframes
dfs_X = np.split(df, len(df)/ 100)

results = pd.DataFrame()
for idx, df_x in enumerate(dfs_X):
    dfs_X[idx] = df_x.sort_values('Y')
    dfs_Y = np.split(dfs_X[idx], len(dfs_X[idx]) / 50)
    for idy, df_y in enumerate(dfs_Y):
        rows = df_y[df_y['Z'] == z_max]
        results = results.append(rows)
results.head()

results將包含所有數據幀中具有最高Z值的行。

輸出:前 5 行

    X   Y   Z   I   R   G   B
541 0   0   9   0   3   6   2
610 0   2   9   3   0   7   6
133 0   4   9   3   3   9   9
731 0   5   9   5   1   0   2
629 0   5   9   0   9   7   7

現在,使用df.to_csv()將此數據幀寫入csv

暫無
暫無

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

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