簡體   English   中英

如何在循環中重命名 Pandas DataFrame 中的列?

[英]How to rename columns in Pandas DataFrame in loop?

我嘗試在循環中合並多個數據幀。 我的代碼是:

my_dict = {
        '1':{
                'providers_using':{
                        'providers':['prov1','prov2','prov3'],
                        'calls_count':[10,20,30]
                }
            },
        '2':{
                'providers_using':{
                        'providers':['prov1','prov2','prov3'],
                        'calls_count':[100,200,300]
                }
            },
        '3':{
                'providers_using':{
                        'providers':['prov1','prov2','prov3'],
                        'calls_count':[1000,2000,3000]
                }
            }

}



df_joined = pd.DataFrame(columns = ['providers','calls_count'])

for i in range(1,4):
  gw_df = pd.DataFrame.from_dict(my_dict[str(i)]['providers_using'])
  gw_df.rename(columns={"calls_count":"gw" + str(i)})
  df_joined = pd.merge(df_joined,gw_df,left_on='providers',right_on = 'providers',how='outer')

print(df_joined)

結果是:

  calls_count_x providers  calls_count_y  calls_count_x  calls_count_y
0       NaN         prov1        10             100           1000     
1       NaN         prov2        20             200           2000     
2       NaN         prov3        30             300           3000

但我希望將名稱列“calls_count”設為 gw1、gw2、gw3 等。循環中的步數可能是隨機的,因此不可接受,只需執行以下操作:

df_joined.columns = ['gw1','gw2','gw3']

預期輸出為:

    providers    gw1            gw3           gw3
0   prov1        10             100           1000     
1   prov2        20             200           2000     
2   prov3        30             300           3000

順便說一句 - 為什么列名是 "calls_count_y","calls_count_x" ?

下面是訣竅。 您還可以重命名列。 這個想法是根據名稱gw + str(i)創建一個列列表並創建一個列列表。

col = []
for i in range(1,4):
  col.append("gw" + str(i))
  gw_df = pd.DataFrame.from_dict(my_dict[str(i)]['providers_using'])
  df_joined = pd.merge(df_joined,gw_df,left_on='providers',right_on = 'providers',how='outer')

df_joined.columns = ['providers'] + col
print(df_joined)

編輯:根據熊貓合並的文檔,后綴將是 _x 和 _y。

這是一種無需循環即可從初始字典中獲取預期輸出的方法:

(pd.concat({k: pd.DataFrame(v).T.apply(pd.Series.explode)  # unnest the lists
            for k,v in my_dict.items()})
   .reset_index()                                          # dict keys as column
   .pivot(index='providers',                               # pivot the calls count
          columns='level_0',
          values='calls_count')
   .add_prefix('gw')                                       # rename columns
   .rename_axis('', axis=1)                                # remove 'level_0' name
   .reset_index()                                          # index as column
)

輸出:

  providers gw1  gw2   gw3
0     prov1  10  100  1000
1     prov2  20  200  2000
2     prov3  30  300  3000

暫無
暫無

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

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