簡體   English   中英

根據列和行的條件填充 DataFrame

[英]Filling a DataFrame based on conditions for both columns and rows

我有一個 dataframe (df_1),其中包含沒有順序的坐標和值數據,如下所示:

x_grid y_grid n_value
0 204.0 32.0 45
1個 204.0 33.0 32
2個 204.0 34.0 94
3個 204.0 35.0 92
4個 204.0 36.0 84

我想塑造成另一個 dataframe (df_2) 以便能夠創建熱圖。 所以我創建了一個空的 dataframe,其中列索引是 x_grid 值,行索引是 y_grid 值。

然后在 for 循環中,我嘗試執行一個操作,如果行索引等於 x_grid 值,然后將具有 y_grid 值索引的列更改為 n_value。

這是我的代碼:

for i, row in enumerate(df_2.iterrows()):
    row_ind = index_list[i]

    for j, item in enumerate(df_1.iterrows()):
        x_ind = item[1].x_grid
    
        if row_ind == x_ind:
            col_ind = item[1].y_grid
            row[1].col_ind = item[1].n_value

我運行這個循環我看到有新值填充 dataframe 但它似乎不正確。 第二個 dataframe 中的坐標和值與第一個不匹配。

第二個 dataframe (df_2) 部分看起來像這樣:

0 25 26 27
0 0 0 27 0
195 0 0 32 36
196 0 65 0 0
197 0 0 0 24
198 0 73 58 0

這是執行此操作的更好方法嗎? 我也很感激任何其他將初始 dataframe 轉換為熱圖的方法。

IIUC:

df_2 = df_1.pivot('x_grid', 'y_grid', 'n_value') \
           .reindex(index=pd.RangeIndex(0, df_1['y_grid'].max()+1),
                    columns=pd.RangeIndex(0, df_1['x_grid'].max()+1),
                    fill_value=0)

如果您有相同 (x, y) 的重復值,請使用pivot_table

df_2 = df_1.pivot_table('n_value', 'x_grid', 'y_grid', aggfunc='mean') \
           .reindex(index=pd.RangeIndex(df_1['y_grid'].min(), df_1['y_grid'].max()+1),
                    columns=pd.RangeIndex(df_1['x_grid'].min(), df_1['x_grid'].max()+1))

例子:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(2022)

df_1 = pd.DataFrame(np.random.randint(0, 20, (1000, 3)),
                    columns=['x_grid', 'y_grid', 'n_value'])

df_2 = df_1.pivot_table('n_value', 'x_grid', 'y_grid', aggfunc='mean') \
           .reindex(index=pd.RangeIndex(df_1['y_grid'].min(), df_1['y_grid'].max()+1),
                    columns=pd.RangeIndex(df_1['x_grid'].min(), df_1['x_grid'].max()+1))

sns.heatmap(df_2, vmin=0, vmax=df_1['n_value'].max())
plt.show()

在此處輸入圖像描述

暫無
暫無

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

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