[英]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.