我正在寻找以下问题的解决方案:
我有一个pandas数据帧(版本0.12.0),如:
df = pd.DataFrame({
'Time' : [0.0, 0.0, 0.1, 0.2],
'Signal_1' : [0, 1, 0, 3],
'Signal_2' : [1, -1.5, -3, 0],
})
>>> print df
Signal_1 Signal_2 Time
0 0 1.0 0.0
1 1 -1.5 0.0
2 0 -3.0 0.1
3 3 2.0 0.2
现在,我使用groupby来合并具有相同时间戳的行(在本例中为第一行和第二行)。但合并的行应该获得组的绝对最大值。所以,我正在搜索函数absmax()来获得以下分组数据帧:
>>> df = df.groupby('Time').absmax()
Signal_1 Signal_2 Time
0 1 -1.5 0.0
1 0 -3.0 0.1
2 3 2.0 0.2
编辑:谢谢; - )
答案 0 :(得分:2)
你真的很接近 - 索引需要idxmax
:
df = df.loc[df.groupby('Signal_1')['Time'].idxmax()]
print (df)
Signal_1 Signal_2 Time
2 0 -3.0 0.1
1 1 -1.5 0.0
3 3 2.0 0.2
或者可能需要:
df = df.loc[df.groupby('Time')['Time'].apply(lambda x: x.abs().idxmax())]
print (df)
Signal_1 Signal_2 Time
0 0 1.0 0.0
2 0 -3.0 0.1
3 3 2.0 0.2
或者:
df = df.loc[df.groupby('Time')['Time'].idxmax()]
print (df)
Signal_1 Signal_2 Time
0 0 1.0 0.0
2 0 -3.0 0.1
3 3 2.0 0.2
答案 1 :(得分:0)
感谢@jezrael的答案。
上下文是:我想合并(append
)两个或更多个具有不同采样时间的数据帧。
df1 = pd.DataFrame({
'Time' : [0.0, 0.1, 0.2],
'Signal_1' : [0, 1, 2],
})
df2 = pd.DataFrame({
'Time' : [0.0, 0.1],
'Signal_2' : [-1.5, -3],
})
df = df1.append([df2], ignore_index=True)
df = df.sort(['Time'])
结果是以下数据帧:
Signal_1 Signal_2 Time
0 0 NaN 0.0
3 NaN -1.5 0.0
1 1 NaN 0.1
4 NaN -3.0 0.1
2 2 NaN 0.2
问题是,df = df.loc[df.groupby('Time')['Time'].idxmax()]
获取Signal_1中最大值的索引:
Signal_1 Signal_2 Time
0 0 NaN 0.0
1 1 NaN 0.1
2 2 NaN 0.2
所需的数据框应如下所示:
Signal_1 Signal_2 Time
0 0 -1.5 0.0
1 1 -3.0 0.1
2 2 NaN 0.2
请分享您的解决方案: - )