Вы можете использовать pandas 'groupby
для группировки по идентификатору образца, а затем использовать метод transform
для получения первого значения для каждого идентификатора образца. Обратите внимание, что это принимает первое значение по номеру строки, а не первое значение по дате, поэтому убедитесь, что строки упорядочены по дате.
df = pd.DataFrame(
[
[1, "2020-07-21", 5],
[1, "2020-07-22", 4],
[1, "2020-07-23", 6],
[2, "2020-07-26", 6],
[2, "2020-07-28", 5],
[3, "2020-07-22", 4],
[3, "2020-07-27", 4],
[3, "2020-07-30", 6],
],
columns=["sample_id", "tested_at", "test_value"],
)
df["first_test"] = df.groupby("sample_id")["test_value"].transform("first")
В результате получается:
sample_id tested_at test_value first_test
0 1 2020-07-21 5 5
1 1 2020-07-22 4 5
2 1 2020-07-23 6 5
3 2 2020-07-26 6 6
4 2 2020-07-28 5 6
5 3 2020-07-22 4 4
6 3 2020-07-27 4 4
7 3 2020-07-30 6 4