Pandas\Python: 作为成对比较的结果创建一个新的数据框
Pandas\Python: Creating a new data frame as a result of pairwise comparison
我有一个示例 DataFrame。
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,7105,7415,7420,7230,7195],'down':[6880,6845,6869,6885,6894,7090,7045,6990],'end':[6930,6920,7095,7025,7300,7130,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
列的第一行和第二行:(将是第一行的 'begin')new_begin = 6880
对于第 up
列的第一行和第二行:if 'up_row1' > 'up_row2': new_up = up_row1 else: up_row2
对于第 down
列的第一行和第二行:if 'down_row1' < 'down_row2': new_down = down_row1 else: down_row2
对于第 end
列的第一行和第二行:(将是第二行的 '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
我有一个示例 DataFrame。
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,7105,7415,7420,7230,7195],'down':[6880,6845,6869,6885,6894,7090,7045,6990],'end':[6930,6920,7095,7025,7300,7130,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
列的第一行和第二行:(将是第一行的 'begin')new_begin = 6880对于第
up
列的第一行和第二行:if 'up_row1' > 'up_row2': new_up = up_row1 else: up_row2对于第
down
列的第一行和第二行:if 'down_row1' < 'down_row2': new_down = down_row1 else: down_row2对于第
end
列的第一行和第二行:(将是第二行的 '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