簡體   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