我有多個帶有多列的資料框,如下所示:
DF =
A B C metadata_Colunm
r1 6 3 9 r1
r2 2 1 1 r2
r3 5 7 2 r3
如何使用 for 回圈遍歷每一列以創建新資料幀,然后洗掉每個新資料幀的值低于 5 的行?結果應如下所示:
DF_A=
A metadata_Colunm
6 r1
5 r1
DF_B=
B metadata_Colunm
7 r3
DF_C=
C metadata_Colunm
9 r1
到目前為止,我所做的是列出我將使用的列(所有不包括元資料),然后將這些列作為新資料框進行處理。由于我還需要保留元資料,因此我將元資料列添加為新資料框的一部分:
DF = DF.drop("metadata_Colunm")
ColList = list(DF)
for item in ColList:
locals()[f"DF_{str(item)}"] = DF[[item, "metadata_Colunm"]]
locals()[f"DF_{str(item)}"] = locals()[f"DF_{str(item)}"].drop(locals()[f"DF_{str(item)}"][locals()[f"DF_{str(item)}"].item > 0.5].index, inplace=True)
但是使用這個我得到“AttributeError:'DataFrame'物件沒有屬性'item'。
任何使這項作業或任何其他解決方案的建議,將不勝感激!
提前致謝!
uj5u.com熱心網友回復:
dfs = {}
for col in df.columns[:-1]:
df_new = df[[col, 'metadata_Colunm']]
dfs[col] = df_new[df_new[col] >= 5]
uj5u.com熱心網友回復:
我會制作一個字典來添加您的新資料框,如下所示:
dictionary = {}
for col in df.columns[:-1]: # all columns but last
new_df = df.loc[:, (col, 'metadata_column')] # make slices
for index, row in new_df.iterrows():
if new_df.loc[index, col] < 5: # remove < 5
new_df.drop(index=index, inplace=True)
dictionary[col] = new_df # add to dictionary so you can refer to later
然后,您可以通過例如呼叫每個資料幀dictionary['A']。
根據該公司的最佳實踐切片使用資料框df.loc(),而不是df[]。
uj5u.com熱心網友回復:
您可以將過濾器應用于資料幀而不是使用回圈
def filter(df, threshold=5):
for column in df.columns:
df = df[df[column]>=threshold]
然后將檔案管理器應用于所有資料幀:
dfs = [df1, df2, df3...]
for df in dfs:
filter(df)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374263.html
上一篇:python,在for回圈中創建多個matplotlib按鈕小部件
下一篇:用于使用硒回圈JS路徑選擇器
