首页 > 解决方案 > 是否有使用熊猫查找列中浮点值索引的函数?

问题描述

嗨,我有一个数据框df,其中包含数字索引、日期时间列和臭氧浓度,以及其他几列。但这里列出了关于我的问题的重要专栏。

index, date, ozone
0, 4-29-2018, 55.4375
1, 4-29-2018, 52.6375
2, 5-2-2018, 50.4128
3, 5-2-2018, 50.3
4, 5-3-2018, 50.3
5, 5-4-2018, 51.8845

我需要根据列值调用行的索引值。但是,多行的列值为 50.3。首先,如何根据特定的列值找到索引值?我已经尝试过: np.isclose(df['ozone'], 50.3).argmax()使用熊猫获取列中浮点数的索引, 但这只会给我数字出现的第一个索引值。有没有办法根据两个参数调用索引(比如询问当日期时间 = 5-2-2018 和臭氧 = 50.3 时的索引值是多少)?

我也试过 df.loc 但它不适用于浮点。

这是一些示例代码:

df = pd.read_csv('blah.csv')

df.set_index('date', inplace = True)
df.index = pd.to_datetime(df.index)
date = pd.to_datetime(df.index)
dv = df.groupby([date.month,date.day]).mean()
dv.drop(columns=['dir_5408'], inplace=True)

df['ozone'] = df.oz_3186.rolling('8H', min_periods=2).mean().shift(-4)
ozone = df.groupby([date.month,date.day])['ozone'].max()
df['T_mda8_3186'] = df.Temp_C_3186.rolling('8H', min_periods=2).mean().shift(-4)
T_mda8_3186 = df.groupby([date.month,date.day])['T_mda8_3186'].max()
df['T_mda8_5408'] = df.Temp_C_5408.rolling('8H', min_periods=2).mean().shift(-4)
T_mda8_5408 = df.groupby([date.month,date.day])['T_mda8_5408'].max()
df['ws_mda8_5408'] = df.ws_5408.rolling('8H', min_periods=2).mean().shift(-4)
ws_mda8_5408 = df.groupby([date.month,date.day])['ws_mda8_5408'].max()

dv_MDA8 = df.drop(columns=['Temp_C_3186', 'Temp_C_5408','dir_5408','ws_5408','u_5408','v_5408','rain(mm)_5724',
                       'rain(mm)_5408','rh_3186','rh_5408','pm10_5408','pm10_3186','pm25_5408','oz_3186'])
dv_MDA8.reset_index(inplace=True)

我需要日期作为代码开头的日期时间索引。

在此先感谢您的帮助。

标签: pandasindexing

解决方案


这就是你可能正在寻找的,

import pandas as pd
import datetime

data = pd.DataFrame({
'index':[0,1,2,3,4,5],
'date':['4-29-2018','4-29-2018','5-2-2018','5-2-2018','5-3-2018','5-4-2018'], 
'ozone':[55.4375,52.6375,50.4128,50.3,50.3,51.8845]
}
)
data.set_index(['index'],inplace=True)

data['date'] = data['date'].apply(lambda x: datetime.datetime.strptime(x,'%m- 
%d-%Y'))
data['ozone'] = data['ozone'].astype('float')

data.loc[(data['date'] == datetime.datetime.strptime('5-3-2018','%m-%d-%Y')) 
& (data['ozone'] == 50.3)]

在此处输入图像描述


推荐阅读