示例数据:
import pandas as pd
import numpy as np
import datetime
data = {'value': [1,2,4,3], 'names': ['joe', 'bob', 'joe', 'bob']}
start, end = datetime.datetime(2015, 1, 1), datetime.datetime(2015, 1, 4)
test = pd.DataFrame(data=data, index=pd.DatetimeIndex(start=start, end=end,
freq="D"), columns=["value", "names"])
给出:
value names
2015-01-01 1 joe
2015-01-02 2 bob
2015-01-03 4 joe
2015-01-04 3 bob
我想通过' 2D'重新采样并获得最大值,如:
df.resample('2D')
预期结果应为:
value names
2015-01-01 2 bob
2015-01-03 4 joe
任何人都可以帮助我吗?
答案 0 :(得分:4)
您可以重新取样以获取arg max of value,然后使用它来提取名称和值
(df.resample('2D')[['value']].idxmax()
.assign(names=lambda x: df.loc[x.value]['names'].values,
value=lambda x: df.loc[x.value]['value'].values)
)
Out[116]:
value names
2015-01-01 2 bob
2015-01-03 4 joe
答案 1 :(得分:2)
使用apply
并返回具有最大值的行。它将通过resample
test.resample('2D').apply(lambda df: df.loc[df.value.idxmax()])
value names
2015-01-01 2 bob
2015-01-03 4 joe