繁体   English   中英

python中如何过滤一个条件并根据过滤条件提取数据?

[英]How to filter one condition and extract the data based on the filtered condition in python?

我有点坚持使用代码来提取我想要的条件。

我想要做的是我想过滤标签 AB0150 的最大值并基于该数字日期然后我想过滤具有该数字的数据。

这是我的数据示例。 我有 3 个月的数据和大约 31 个不同的标签。

ID           TIME              Machine_NO     TAG      VALUE
99959   2020-11-13 19:34:00       409301     AB0150    63.59
99959   2020-12-15 17:55:00       409302     AB0151    0.00
99959   2020-11-05 01:25:00       409303     AB0152    499.65
99959   2021-01-01 00:05:00       409301     AB0153    80.00
99959   2020-11-13 19:34:00       409301     AB0150    50.59
99959   2020-11-13 19:34:00       409301     AB0150    53.59
99959   2020-12-13 19:59:00       409301     AB0150    12.5
99959   2021-01-11 15:22:00       409301     AB0150    21.3
99959   2020-12-15 17:55:00       409302     AB0151    4.69
99959   2020-11-21 05:16:00       409303     AB0152    2133
99959   2020-11-13 19:34:00       409301     AB0151    700
99959   2020-11-13 19:34:00       409302     AB0152    35.5
99959   2020-11-13 19:34:00       409303     AB0153    2159

以下是到目前为止的代码。

df.sort_values(by=['TAG','VALUE'], ascending=False).drop_duplicates(subset=['TAG'],keep='first')
df_check=df[df['TIME']=='2020-11-13 19:34:00']

我想要一些自动代码,如果我更改日期范围,我需要更改日期。 我想过滤最大的标签和 select 日期并立即提取具有该日期的数据。 有什么好的方法可以做到这一点吗?

这是所需的 output。

 ID           TIME              Machine_NO     TAG      VALUE
99959   2020-11-13 19:34:00       409301     AB0150     63.59
99959   2020-11-13 19:34:00       409301     AB0151     700
99959   2020-11-13 19:34:00       409302     AB0152     35.5
99959   2020-11-13 19:34:00       409303     AB0153     2159

谢谢

你非常接近你想要的。 sort_values步骤中生成的 dataframe 存储为它自己的 dataframe 并使用.iat()从第一行(索引 0)和 TIME 列(第二列;索引 1)中提取TIME 然后按该 TIME 值过滤:

df_time = df.sort_values(by=['TAG','VALUE'], ascending=False).drop_duplicates(subset=['TAG'], keep='first')
MAX_TIME = df_time.iat[0, 1]
# '2020-11-13 19:34:00'

如果 TIME 不一定是第二列,请使用它从第一行获取 TIME:

MAX_TIME = df_time.iat[0, df_time.columns.get_loc('TIME')]

然后用 MAX_TIME 过滤原始 df:

df_check = df[df['TIME'] == MAX_TIME]

# Result:
       ID                 TIME  Machine_NO     TAG    VALUE
0   99959  2020-11-13 19:34:00      409301  AB0150    63.59
4   99959  2020-11-13 19:34:00      409301  AB0150    50.59
5   99959  2020-11-13 19:34:00      409301  AB0150    53.59
10  99959  2020-11-13 19:34:00      409301  AB0151   700.00
11  99959  2020-11-13 19:34:00      409302  AB0152    35.50
12  99959  2020-11-13 19:34:00      409303  AB0153  2159.00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM