時間ごとのデータから毎日の最大値を取得するのに問題があります。元のファイルには、名前ごとに毎日24個のデータが含まれています(名前が多すぎます)。例として、ここに1つの名前の24のデータがあります。
Start Time Period name value
2/23/2019 0:00 60 MBTS_H2145X 100
2/23/2019 1:00 60 MBTS_H2145X 100
2/23/2019 2:00 60 MBTS_H2145X 1
2/23/2019 3:00 60 MBTS_H2145X 1
2/23/2019 4:00 60 MBTS_H2145X 1
2/23/2019 5:00 60 MBTS_H2145X 2324
2/23/2019 6:00 60 MBTS_H2145X 2323
2/23/2019 7:00 60 MBTS_H2145X 2323
2/23/2019 8:00 60 MBTS_H2145X 2323
2/23/2019 9:00 60 MBTS_H2145X 2323
2/23/2019 10:00 60 MBTS_H2145X 2323
2/23/2019 11:00 60 MBTS_H2145X 2323
2/23/2019 12:00 60 MBTS_H2145X 1
2/23/2019 13:00 60 MBTS_H2145X 21
2/23/2019 14:00 60 MBTS_H2145X 21
2/23/2019 15:00 60 MBTS_H2145X 23
2/23/2019 16:00 60 MBTS_H2145X 350
2/23/2019 17:00 60 MBTS_H2145X 323
2/23/2019 18:00 60 MBTS_H2145X 23
2/23/2019 19:00 60 MBTS_H2145X 23
2/23/2019 20:00 60 MBTS_H2145X 2323
2/23/2019 21:00 60 MBTS_H2145X 23
2/23/2019 22:00 60 MBTS_H2145X 23
2/23/2019 23:00 60 MBTS_H2145X 2
私が得る結果は次のとおりです:(これは間違っており、2324になるはずです)
Start Time name max value
0 2/23/2019 MBTS_H2145X 350
以下のコードがありますが、間違った結果が得られます
import dask.dataframe as dd
import numpy as np
import pandas as pd
filename='V.csv'
df = dd.read_csv(filename, dtype='str')
#_________changing date format
df['Start Time'] = df['Start Time'].map(lambda x: pd.to_datetime(x, errors='coerce'))
#_________change to pure date without hour
df['Start Time'] = df['Start Time'].dt.date
grouped_df=(df.groupby(['Start Time','name']).agg({'value':'max'}).rename(columns={'value':'max value'}).reset_index())
grouped_df.to_csv('e1.csv')
print(grouped_df.head(12))
コードをまったく同じに保ちます。この行を次のように変更するだけです。
grouped_df=(df.groupby(['Start Time','name']).agg({'value':'max'}).rename(columns={'value':'max value'}).reset_index())
への変更:
df.value = pd.to_numeric(df.value)
grouped_df= (df.groupby(['Start Time','name'])['value'].max().rename(columns={'value':'max value'}).reset_index()
df = pd.merge(df, grouped_df, on = ['Start Time','name'])
集計関数で何かが起こっている可能性があります。
または、DTYPEが文字列だけの場合は、pd.to_numeric行を追加し、他のすべてを同じに保ちます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加