#python #pandas #series
#python #pandas #Серии
Вопрос:
Я использую zip для сравнения двух серий Max_Plot2015_serie, Max_Plot2005_2014_serie и возврата максимального значения из двух в новую серию Max_scatter2015[‘Temp_Celsius’]. Как я могу также импортировать индекс соответствующего значения (индекс — это дата)? Я новичок в Python и плохо осваиваю функции
Max_scatter2015['Temp_Celcius'] = [max(value) for value in zip(Max_Plot2015_serie, Max_Plot2005_2014_serie)]
Max_Plot2005_2014_serie
2014-12-25 10.0
2014-12-26 10.0
2014-12-27 11.1
2014-12-28 13.3
2014-12-30 3.3
2014-12-31 -2.8
Name: Temp_Celcius, dtype: float64
<class 'pandas.core.series.Series'>
Max_Plot2015_serie
2015-10-02 18.9
2015-03-10 9.4
2015-02-23 -1.1
2015-06-09 25.6
Name: Temp_Celcius, dtype: float64
<class 'pandas.core.series.Series'>
Max_scatter2015
Temp_Celcius [18.9, 13.9, 26.1, 23.3, 6.7, 18.3, 27.8, 7.2,...
dtype: object
<class 'pandas.core.series.Series'>
Комментарии:
1. Извините, я не могу понять, чего вы хотите. Внизу, где вы показываете
Max_scatter2015
, это тот результат, который вы хотите? или результат, который вы получаете? Вы пытаетесь, например, сравнить температуры для одного и того же дня года в разные годы?2. попробуйте
np.where
для сравнения.
Ответ №1:
IIUC, вы можете попробовать что-то вроде этого:
s_2014 = pd.Series(np.random.randint(0,120,365),
index=pd.date_range('2014-01-01', periods=365, freq='D'))
s_2015 = pd.Series(np.random.randint(0,135, 365),
index=pd.date_range('2015-01-01', periods=365, freq='D'))
Найдите максимальные значения по дням:
m = [max(i, j, key=lambda x: x[1]) for i, j in zip(s_2014.iteritems(), s_2015.iteritems())]
j, i = zip(*m)
s = pd.Series(i, index=j)
s
Вывод:
2015-01-01 104
2014-01-02 101
2014-01-03 118
2014-01-04 26
2015-01-05 98
...
2015-12-27 132
2014-12-28 58
2015-12-29 110
2015-12-30 115
2015-12-31 35
Length: 365, dtype: int64
Обновите только данные за 2015 год:
s[s.index.year == 2015]
Вывод:
2015-01-01 60
2015-01-03 109
2015-01-06 71
2015-01-07 113
2015-01-09 9
...
2015-12-16 90
2015-12-23 98
2015-12-26 132
2015-12-27 107
2015-12-29 65
Length: 204, dtype: int64
Комментарии:
1. Спасибо, ваше решение работает нормально, но я хотел бы иметь только данные за 2015 год, как можно настроить решение для получения этой новой серии?
Ответ №2:
Может быть, это то, что вы ищете:
df = pandas.DataFrame([])
df["Max_Plot2015_serie"] = Max_Plot2015_serie
df["Max_Plot2005_2014_serie"] = Max_Plot2005_2014_serie
df["max_value"] = df.apply(lambda x: max(x.Max_Plot2015_serie, x.Max_Plot2005_2014_serie), axis=1)
df["max_index"] = df.apply(lambda x: (0 if x.Max_Plot2015_serie > x.Max_Plot2005_2014_serie else 1), axis=1)