You need idxmaxfor the first index value by condition, only the required index must be unique:
idx = (df['Voltage'] >= 14.0).idxmax()
df.loc[mask, 'Time of Full Charge'] = mask.idxmax().strftime('%H:%M')
print (df)
Voltage Time of Full Charge
2017-01-02 00:00:00 13.1 NaN
2017-01-02 00:01:00 13.2 NaN
2017-01-02 00:02:00 13.3 NaN
2017-01-02 00:03:00 14.1 00:03
2017-01-02 00:04:00 14.3 NaN
2017-01-02 00:04:00 13.5 NaN
Or:
idx = (df['Voltage'] >= 14.0).idxmax()
df['Time of Full Charge'] = np.where(df.index == idx, idx.strftime('%H:%M'), '')
print (df)
Voltage Time of Full Charge
2017-01-02 00:00:00 13.1
2017-01-02 00:01:00 13.2
2017-01-02 00:02:00 13.3
2017-01-02 00:03:00 14.1 00:03
2017-01-02 00:04:00 14.3
2017-01-02 00:04:00 13.5
For a unique index, you can use MultiIndex:
df.index = [np.arange(len(df.index)), df.index]
idx = (df['Voltage'] >= 14.0).idxmax()
df['Time of Full Charge'] = np.where(df.index.get_level_values(0) == idx[0],
idx[1].strftime('%H:%M'),
'')
df.index = df.index.droplevel(0)
print (df)
Voltage Time of Full Charge
2017-01-02 00:00:00 13.1
2017-01-02 00:01:00 13.2
2017-01-02 00:02:00 13.3
2017-01-02 00:03:00 14.1 00:03
2017-01-02 00:04:00 14.3
2017-01-02 00:04:00 13.5
source
share