python - 从 DataFrame 中选择属于同一系列的行中的最后一个观察值
问题描述
假设我在 Python 中有一个类似于这个的 DataFrame:
df = pd.DataFrame.from_dict({
'0': ['monday', 1],
'1': ['monday', 5],
'2': ['monday', 2],
'3': ['tuesday', 1],
'4': ['tuesday', 3]
}, orient='index', columns=['day', 'value'])
我想提取每一天的最后一个观察/元素,例如由 value 列定义,所以:
df = df.sort_values(['day','value'])
如何在大型 DataFrame 上有效地做到这一点?期望效果的一个极其缓慢的示例是:
indices = []
for day in df['day'].unique():
indices.append(list(df[df['day'] == day].index)[-1])
df.loc[np.array(indices)]
产生:
day value
1 monday 5
4 tuesday 3
我知道这个答案:从纵向数据中选择最后一次观察,但它在 R 中。
解决方案
添加带有参数drop_duplicates
的指定列,如有必要,还可以默认创建天数:day
last
ordered categorical
df = pd.DataFrame.from_dict({
'0': ['monday', 1, 4],
'1': ['monday', 5, 1],
'2': ['monday', 2, 0],
'3': ['tuesday', 1, 2],
'4': ['tuesday', 3, 3]
}, orient='index', columns=['day', 'value', 'value1'])
print (df)
day value value1
0 monday 1 4
1 monday 5 1
2 monday 2 0
3 tuesday 1 2
4 tuesday 3 3
categories=['monday','tuesday','wednesday','thursday','friday','saturday', 'sunday']
df['day'] = pd.Categorical(df['day'], categories=categories, ordered=True)
df = df.sort_values(['day','value']).drop_duplicates('day', keep='last')
print (df)
day value value1
1 monday 5 1
4 tuesday 3 3
推荐阅读
- sql - Oracle 代理访问
- react-native-android - 链接网址未清除
- javascript - 状态更新未有效反映在浏览器窗口上 - 反应状态更新问题
- mpeg-dash - 具有非零重复计数的分段列表的 Dash 播放器
- authentication - 接入设备(三层交换机)不支持portal协议如何实现portal认证
- oracle - Crystal Reports - 如果页面没有记录,则禁止页面标题
- python - 将数据存储在数组中并将其限制为相似值python的数量
- javascript - 使用 for 循环递归搜索对象的父数组
- python - 如何让我的程序在 if 语句后继续
- xaml - 条目和按钮不集中在 xamarin 表单中