如何解决Pandas \ Python:通过成对比较创建新的数据框
df = pd.DataFrame({'time':['12:00','12:01','12:02','12:03','12:04','12:05','12:06','12:07'],'begin':[6880,6930,6920,7095,7025,7300,7130,7110],'up':[7034,6995,7105,7415,7420,7230,7195],'down':[6880,6845,6869,6885,6894,7090,7045,6990],'end':[6930,7110,7055]})
df = df.set_index('time')
begin up down end
time
12:00 6880 7034 6880 6930
12:01 6930 6995 6845 6920
12:02 6920 7105 6869 7095
12:03 7095 7105 6885 7025
12:04 7025 7415 6894 7300
12:05 7300 7420 7090 7130
12:06 7130 7230 7045 7110
12:07 7110 7195 6990 7055
算法:
-
对于索引列
time
的第一行和第二行:(与第一行相同)= 12:00 -
对于列
begin
的第一行和第二行:(将是第一行的“开始”)new_begin = 6880 -
对于列
up
的第一行和第二行:如果'up_row1'>'up_row2':new_up = up_row1否则:up_row2 -
对于列
down
的第一行和第二行:如果'down_row1' -
对于列
end
的第一行和第二行:(将是第二行的“结尾”)new_end = 6920第三排和第四排以及其他两排的依此类推
因此结果必须完全像这样
begin up down end
time
12:00 6880 7034 6845 6920
12:02 6920 7105 6869 7025
12:04 7025 7420 6894 7130
12:06 7130 7230 6990 7055
在此先感谢您的帮助!
解决方法
您可以groupby
在自定义成对分组器上使用数据框,然后使用字典agg
dct
:
dct = {'time': 'first','begin': 'first','up': 'max','down': 'min','end': 'last'}
df = df.reset_index().groupby(np.arange(len(df)) // 2).agg(dct).set_index('time')
begin up down end
time
12:00 6880 7034 6845 6920
12:02 6920 7105 6869 7025
12:04 7025 7420 6894 7130
12:06 7130 7230 6990 7055
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。