python - 如何根据熊猫的日期时间列查找每个 id 的第一次出现?
问题描述
我已经看到了很多类似的问题,但并没有完全找到我的具体问题的答案。假设我有一个df:
sample_id tested_at test_value
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
df 已经按tested_at
列升序排序。我现在需要添加另一列first_test
,该列将指示每一行中每个的第一个测试值sample_id
,无论它是否最高。输出应该是:
sample_id tested_at test_value first_test
1 2020-07-21 5 5
1 2020-07-22 4 5
1 2020-07-23 6 5
2 2020-07-26 6 6
2 2020-07-28 5 6
3 2020-07-22 4 4
3 2020-07-27 4 4
3 2020-07-30 6 4
df 也很大,因此非常感谢更快的方法。
解决方案
您可以使用 pandas'groupby
按样本 ID 分组,然后使用该transform
方法获取每个样本 ID 的第一个值。请注意,这将按行号获取第一个值,而不是按日期获取第一个值,因此请确保行按日期排序。
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
推荐阅读
- angular8 - 在服务器给出的角度 8 中设置 href 字符串
- python-3.x - 如何从“旧式”类实现“新式”Python AsyncIO 迭代器函数?
- ios - 无法在 Swift 中使用来自 Firebase 的数据立即加载 UIImageView 和 UILabel
- python - 你如何删除编码的字符
- javascript - React/Redux 变量在生产中返回 HTML
- r - R从先知的每周季节性分析中删除周六和周日
- batch-file - 批处理多个 m3u 文件
- c++ - 我没有得到匹配的功能来调用等等
- c# - WPF TreeView 不显示可观察集合中的项目
- python - 带有 PySide 2 和 QtDesigner 的 pyqtgraph