[英]Dropping rows of dataframe in a for-loop in Python
我有多个包含多个列的数据框,如下所示:
DF =
A B C metadata_Colunm
r1 6 3 9 r1
r2 2 1 1 r2
r3 5 7 2 r3
如何使用 for 循环遍历每一列以创建新的 dataframe,然后为每个新的 dataframe 删除值低于 5 的行? 结果应如下所示:
DF_A=
A metadata_Colunm
6 r1
5 r1
DF_B=
B metadata_Colunm
7 r3
DF_C=
C metadata_Colunm
9 r1
到目前为止,我所做的是列出我将使用的列(所有不包括元数据),然后将 go 列在新的数据帧中。 由于我还需要保留元数据,因此我将元数据列添加为新 dataframe 的一部分:
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' object 没有属性'item'。
任何有关使这项工作的建议或任何其他解决方案,将不胜感激!
提前致谢!
dfs = {}
for col in df.columns[:-1]:
df_new = df[[col, 'metadata_Colunm']]
dfs[col] = df_new[df_new[col] >= 5]
您可以将过滤器应用于数据帧而不是使用循环
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)
我会制作一个字典来添加你的新数据框,如下所示:
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']
调用每个 dataframe 。
根据这个最佳实践,使用df.loc()
而不是df[]
对 dataframe 进行切片。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.