python - 带有日期时间列的子集熊猫数据框
问题描述
跟进这个问题,其中 pandas 数据框是一个字符串变量和一个idx.min
日期时间变量的子集,我们如何使用两个日期时间变量进行子集?对于下面的示例数据框,我们如何从class == C
、minimum base_date
和maximum date_2
日期中子集行?[答案将是第 3 行]:
print(example)
slot_id class day base_date date_2
0 1 A Monday 2019-01-21 2019-01-24
1 2 B Tuesday 2019-01-22 2019-01-23
2 3 C Wednesday 2019-01-22 2019-01-24
3 4 C Wednesday 2019-01-22 2019-01-26
4 5 C Wednesday 2019-01-24 2019-01-25
5 6 C Thursday 2019-01-24 2019-01-22
6 7 D Tuesday 2019-01-23 2019-01-24
7 8 E Thursday 2019-01-24 2019-01-30
8 9 F Saturday 2019-01-26 2019-01-31
我们可以使用class == "C"
:minimum base_date
df.iloc[pd.to_datetime(df.loc[df['class'] == 'C', 'base_date']).idxmin()]
但是,如果我们有 2 个或更多日期变量的条件如 max/min,那么索引解决方案是否仍然实用?具有 2 个或更多变量的索引子集不意味着嵌套df.iloc
吗?这是使用 2 个或更多日期时间变量执行子集的唯一方法吗?
数据:
print(example.to_dict())
{'slot_id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9}, 'class': {0: 'A', 1: 'B', 2: 'C', 3: 'C', 4: 'C', 5: 'C', 6: 'D', 7: 'E', 8: 'F'}, 'day': {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Wednesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Tuesday', 7: 'Thursday', 8: 'Saturday'}, 'base_date': {0: datetime.date(2019, 1, 21), 1: datetime.date(2019, 1, 22), 2: datetime.date(2019, 1, 22), 3: datetime.date(2019, 1, 22), 4: datetime.date(2019, 1, 24), 5: datetime.date(2019, 1, 24), 6: datetime.date(2019, 1, 23), 7: datetime.date(2019, 1, 24), 8: datetime.date(2019, 1, 26)}, 'date_2': {0: datetime.date(2019, 1, 24), 1: datetime.date(2019, 1, 23), 2: datetime.date(2019, 1, 24), 3: datetime.date(2019, 1, 26), 4: datetime.date(2019, 1, 25), 5: datetime.date(2019, 1, 22), 6: datetime.date(2019, 1, 24), 7: datetime.date(2019, 1, 30), 8: datetime.date(2019, 1, 31)}}
数据预处理:
example = pd.DataFrame(example)
example['base_date'] = pd.to_datetime(example['base_date'].astype(str), format='%d%m%Y')
example['base_date'] = example['base_date'].dt.date
example['date_2'] = pd.to_datetime(example['date_2'].astype(str), format='%d%m%Y')
example['date_2'] = example['date_2'].dt.date
解决方案
你可以使用transform
yourdf=example[example['base_date']==example.groupby('class')['base_date'].transform('min')]
如果仅适用于 C 列
yourdf.loc[yourdf['class']=='C',:]
也idxmin
oridxmax
只会返回满足最小或最大条件的第一个索引,所以当有多个最大值或最小值时,它们仍然只显示一个索引
推荐阅读
- react-native - 使用带有 Firebase 身份验证的 react-native-google-signin(android 实现)
- javascript - Promise.all 的异步图像预加载在非 Chrome 浏览器上不起作用
- python - 如何将 Python 2.7 字符串解释为 C char 数组中的整数?
- reactjs - 将 event.target.value 作为参数发送到已调度的操作
- python - Pip 将文件安装到旧版本的 Python(Pip、Pandas、Python、Mac)
- javascript - 无法读取未定义 Discord 的属性“角色”
- flutter - 我如何使用带有颤振语言环境的 if 语句来显示课程
- javascript - 为什么 JavaScript 不会执行?
- python - 如何在不更改模型的情况下在 django 中解决此问题?
- c# - ¿ 有没有办法不永久改变我的统一预制件?