我喜欢在DataFrame中创建一个名为“sub”的新列,并通过从“LMP”列中减去“INT”列来计算其值,但仅从每个唯一“ID”的最新行中减去“FM”列设置为“time0”,我计算FM如下,但我不知道如何实现子列。
data = {
'ID': [0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2],
'VIS': [0.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0],
'STA': [float('NaN'), 4.0, 7.0, 7.0, 7.0, 7.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0],
'LMP': [float('NaN'), -35.0, 411.0, 773.0, 1143.0, 1506.0, float('NaN'), float('NaN'), float('NaN'), float('NaN'), float('NaN'), float('NaN')],
'INT': [0.0, 0.0, 413.0, 777.0, 1171.0, 1509.0, 1967.0, 2310.0, 2627.0, 2970.0, 3357.0, 3768.0],
'FM': [-1, -1, "time0", -1, -1, "time0", -1, -1, -1, -1, -1,-1]
}
sorted_data = pd.DataFrame(data)
sorted_data['FM'] = np.nan
for id in sorted_data['ID'].unique():
filter_condition = (sorted_data['ID'] == id) & (~sorted_data['LMP'].isnull())
if filter_condition.any():
last_row_index = sorted_data.loc[filter_condition].index[-1]
sorted_data.loc[last_row_index, 'FM'] = 'time0'
sorted_data['FM'] = sorted_data['FM'].fillna(-1)
预期输出应按下式计算:
'sub': [float('NaN'), 0-411.0,413-411, 777-1509.0 , 1171.0-1509.0 ,1509-1509, 1967.0-1509, 2310.0-1509,2627.0- 1509, 2970.0-1509, 3357.0-1509,3768.0-1509]
2条答案
按热度按时间frebpwbc1#
下面是在time0从LMP列中减去INT列的示例代码
zdwk9cvp2#
IIUC,您可以用途:
输出: