【问题标题】:How to loop through multiple data frames to select a data frame based on row criteria?如何循环遍历多个数据框以根据行条件选择数据框?
【发布时间】:2020-01-03 00:37:21
【问题描述】:

我在 Pandas 中有一些 Python 数据框,我想遍历它们以找出哪个数据框符合我的行条件并将其保存在新的数据框中。

d = {'Count' : ['10', '11', '12', '13','13.4','12.5']}
df_1= pd.DataFrame(data=d)
df_1

d = {'Count' : ['10', '-11', '-12', '13','16','2']}
df_2= pd.DataFrame(data=d)
df_2

这是我要使用的逻辑,但它不包含正确的语法,

for df in (df_1,df_2)
    if df['Count'][0] >0 and df['Count'][1] >0 and df['Count'][2]>0 and df['Count'][3]>0 
    and (df['Count'][4] is between df['Count'][3]+0.5 and df['Count'][3]-0.5) is True:
        df.save

正确的输出是 df_1... 因为它符合我的条件。如何创建一个新的DataFrameLIST 来保存结果?

【问题讨论】:

  • 到底是什么问题?你的伪代码看起来不错,为什么不用 Python 写呢?
  • 不知道为什么人们投票反对你。您提供了一个带有示例数据的明确问题,并提到您当前的代码引发了语法错误。我会尽快提供答案

标签: python python-3.x pandas loops dataframe


【解决方案1】:

如果您对 cme​​ts 有任何疑问,请告诉我。我对您的代码所做的主要更新是:

  1. 将您的chained indexing 替换为.loc
  2. 将您最初的几个单独的 and'd 比较合并到对系列片段的比较中,使用 .all() 简化为单个 T/F

代码如下:

import pandas as pd 

# df_1 & df_2 input taken from you
d = {'Count' : ['10', '11', '12', '13','13.4','12.5']}
df_1= pd.DataFrame(data=d)

d = {'Count' : ['10', '-11', '-12', '13','16','2']}
df_2= pd.DataFrame(data=d)

# my solution here
df_1['Count'] = df_1['Count'].astype('float')
df_2['Count'] = df_2['Count'].astype('float')

my_dataframes = {'df_1': df_1, 'df_2': df_2}
good_dataframes = []
for df_name, df in my_dataframes.items():
    if (df.loc[0:3, 'Count'] > 0).all() and (df.loc[3,'Count']-0.5 <= df.loc[4, 'Count'] <= df.loc[3, 'Count']+0.5):
        good_dataframes.append(df_name)

good_dataframes_df = pd.DataFrame({'good': good_dataframes})

测试:

>>> print(good_dataframes_df)
   good
0  df_1

【讨论】:

  • 我更喜欢有一个数据框名称的列表,即 df_1....df4....df5,对于那些符合条件的人,在 LIST 或 Dataframe 中,我提供了一个屏幕截图
  • 更新了我的答案以响应您在问题更新中发布的good df 屏幕截图
  • 其实,我的实际条件很复杂,当我在if条件中添加OR时,如何为更长的if条件添加正确的缩进?
  • 你的最后一个问题让我有点困惑。您可以在布尔值中有一个 or ,就像我的答案中有一个 and 一样。您的缩进问题听起来像是一个不同的问题,可能取决于您的代码编辑器如何处理空格或换行符。如果您将另一个可复制的示例作为新问题发布,您可以在此处链接到它,我会看看。
  • 没关系,我在这里发了一个新问题stackoverflow.com/questions/59586706/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2021-12-31
  • 2021-02-14
  • 1970-01-01
相关资源
最近更新 更多