[英]More efficient way to add columns with same string values in multiple dataframes with loops or lambdas?
我想在我的 8 個相似數據框中的每一個中添加一個新列 Category。 此列中的值相同,它們也是 df 名稱,如本例中的df1_p8
。 我用過:
In: df61_p8.insert(3,"Category","df61_p8", True)
# or simply, df61_p8['Category']='df61_p8'
Out:
code violation_description Category
89491 9-1-503 Defective or obstructed duct system one- building df61_p8
102045 9-1-503 Defective or obstructed duct system one- building df61_p8
103369 9-1-503 Defective or obstructed duct system one- building df61_p8
130440 9-1-502 Failure to maintain at least one (1) elevator df61_p8
132446 9-1-503 Defective or obstructed duct system one- building df61_p8
最終,我想將這 8 個數據幀附加/連接到一個 dataframe 中。
我想知道是否有更有效的方法來做到這一點,而不是在每個 dataframe 上一一使用.insert。 循環或 lambda 之類的東西。作為初學者,我不確定如何在我的情況下應用它們? 謝謝你。
append_alldfs = []
x=[df61_p1,df61_p2,df61_p3,df61_p4,df61_p5,df61_p6,df61_p7,df61_p8]
lambdafunc = lambda x: x.insert(3,"Category","x",True)
您可以將pd.concat
與keys
參數一起使用,然后reset_index
:
pd.concat([df0,df1,df2,df3], keys=['df0', 'df1', 'df2', 'df3']).reset_index(level=0)
MCVE:
df0 = pd.DataFrame(np.ones((3,3)), columns=[*'ABC'])
df1 = pd.DataFrame(np.zeros((3,3)), columns=[*'ABC'])
df2 = pd.DataFrame(np.zeros((3,3))+3, columns=[*'ABC'])
df3 = pd.DataFrame(np.zeros((3,3))+4, columns=[*'ABC'])
df_out = pd.concat([df0,df1,df2,df3], keys=['df0', 'df1', 'df2', 'df3']).reset_index(level=0)
df_out
Output:
level_0 A B C
0 df0 1.0 1.0 1.0
1 df0 1.0 1.0 1.0
2 df0 1.0 1.0 1.0
0 df1 0.0 0.0 0.0
1 df1 0.0 0.0 0.0
2 df1 0.0 0.0 0.0
0 df2 3.0 3.0 3.0
1 df2 3.0 3.0 3.0
2 df2 3.0 3.0 3.0
0 df3 4.0 4.0 4.0
1 df3 4.0 4.0 4.0
2 df3 4.0 4.0 4.0
def add_column(df, col_name, col_value):
return df.insert(loc=-1, column=col_name, value=col_value, allow_duplicates = False)
df_list = [........]
col_name = ...
col_value = .... # copy column (Category) values
res = map(lambda df: add_column(df, col_name, col_value), df_list)
list(res)
保持簡單明了。
for col_val, df in [
('df61_p1', df61_p1),
('df61_p2', df61_p2),
('df61_p3', df61_p3),
('df61_p4', df61_p4),
('df61_p5', df61_p5),
('df61_p6', df61_p6),
('df61_p7', df61_p7),
('df61_p8', df61_p8),
]:
df['Category'] = col_val
雖然肯定有更多的“元編程”方式來完成相同的任務,但這些方式通常非常復雜,並且更難理解和重構。
然而,鑒於這段代碼的結構,我想有一些方法可以在你到達這一點之前解決這個問題。
例如,這些數據幀是在什么時候被拆分的? 也許首先從不使用單獨的數據幀[將原始的 dataframe 保持在一起/在開始時連接](並根據需要使用 apply、groupby、pivot 和熔化操作),您可以完全避免這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.