[英]Capturing values of variables across dataframes from a dict of dataframes in python
我在字典中有3個數據框,其中鍵是月份標識符,值是數據框:
以下是數據幀及其鍵的快照:
現在,對於每個唯一變量,我想捕獲其在所有月份/數據框中的相關強度。 如果變量在df中具有相關值,則應將其捕獲,否則該值將為0。類似於excel中的VLOOKUP。
最終的數據幀如下所示:
對我來說,這在Python中實現似乎很復雜,因此有人可以幫我嗎?
以下是用於生成示例數據並創建數據框字典的代碼:
import pandas as pd
import numpy as np
df1 = pd.DataFrame([{'Variable_Name':'Pending_Disconnect','correlation': 0.553395448},
{'Variable_Name':'status_Active','correlation': 0.539464806},
{'Variable_Name':'days_active','correlation':0.414774231},
{'Variable_Name':'days_pend_disco','correlation':0.392915837},
{'Variable_Name':'prop_tenure','correlation':0.074321692},
{'Variable_Name':'abs_change_3m','correlation':0.062267386}
])
df2 = pd.DataFrame([{'Variable_Name':'Pending_Change','correlation': 0.043461995},
{'Variable_Name':'status_Active','correlation': 0.038057697},
{'Variable_Name':'ethnic','correlation':0.037503202},
{'Variable_Name':'days_active','correlation':0.037227245},
{'Variable_Name':'archetype_grp','correlation':0.035761434},
{'Variable_Name':'age_nan','correlation':0.035761434}
])
df3 = pd.DataFrame([{'Variable_Name':'active_frq_N','correlation':0.025697016},
{'Variable_Name':'active_frq_Y','correlation': 0.025697016},
{'Variable_Name':'ethnic','correlation':0.025195149},
{'Variable_Name':'ecgroup','correlation':0.023192408},
{'Variable_Name':'age','correlation':0.023121305},
{'Variable_Name':'archetype_nan','correlation':0.023121305}
])
dfs = [df1,df2,df3]
months = ['Jan - Feb 2018','Jan - Mar 2018','Jan - Apr 2018']
sample_dict = dict(zip(months,dfs))
使用pd.concat
作為:
df1.set_index('Variable_Name',inplace=True)
df2.set_index('Variable_Name',inplace=True)
df3.set_index('Variable_Name',inplace=True)
df = pd.concat([df1,df2,df3], axis=1, sort=False).fillna(0)
df.reset_index(inplace=True)
df.columns = ['Variable_Name','Jan - Feb 2018','Jan - Mar 2018','Jan - Apr 2018']
print(df)
Variable_Name Jan - Feb 2018 Jan - Mar 2018 Jan - Apr 2018
0 Pending_Disconnect 0.553395 0.000000 0.000000
1 status_Active 0.539465 0.038058 0.000000
2 days_active 0.414774 0.037227 0.000000
3 days_pend_disco 0.392916 0.000000 0.000000
4 prop_tenure 0.074322 0.000000 0.000000
5 abs_change_3m 0.062267 0.000000 0.000000
6 Pending_Change 0.000000 0.043462 0.000000
7 ethnic 0.000000 0.037503 0.025195
8 archetype_grp 0.000000 0.035761 0.000000
9 age_nan 0.000000 0.035761 0.000000
10 active_frq_N 0.000000 0.000000 0.025697
11 active_frq_Y 0.000000 0.000000 0.025697
12 ecgroup 0.000000 0.000000 0.023192
13 age 0.000000 0.000000 0.023121
14 archetype_nan 0.000000 0.000000 0.023121
您可以替換數據pd.concat
的列名,然后使用pd.concat
串聯數據pd.concat
。
for key, df in sample_dict.items():
df.rename(columns={'correlation':'correlation '+ key}, inplace=True)
pd.concat(dfs)
編輯:您也可以省略字典,並從數據幀列表中執行此操作。
for i, df in enumerate(dfs):
df.rename(columns={'correlation':'correlation '+ months[i]}, inplace=True)
pd.concat(dfs)
我的最終代碼是@onno和@Sandeep Kadapa的代碼的組合:
final_df = pd.DataFrame()
for key, df in sample_dict.items():
df = sample_dict[key]
df = df.iloc[:,0:2]
df.rename(columns={'correlation':'correlation '+ key}, inplace=True)
final_df = pd.concat([final_df,df],axis = 1,sort = False).fillna(0)
非常感謝您的快速回復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.