【发布时间】:2021-12-26 02:08:41
【问题描述】:
我有以下数据框:
| . | id | outcome |
|---|---|---|
| 0 | 3 | no |
| 1 | 3 | no |
| 2 | 3 | no |
| 3 | 3 | yes |
| 4 | 3 | no |
| 5 | 5 | no |
| 6 | 5 | no |
| 7 | 5 | yes |
| 8 | 5 | yes |
| 9 | 6 | no |
| 10 | 6 | no |
| 11 | 6 | yes |
| 12 | 6 | yes |
| 13 | 6 | yes |
| 14 | 6 | yes |
| 15 | 6 | yes |
| 16 | 6 | no |
| 17 | 6 | no |
如果结果列中的最后一个“是”,我想删除所有“是”行。
如果它们是数据框中的第一个值,我也想删除所有“否”
这些必须按“id”列分组
这应该是输出:
| . | id | outcome |
|---|---|---|
| 3 | 3 | yes |
| 4 | 3 | no |
| 11 | 6 | yes |
| 12 | 6 | yes |
| 13 | 6 | yes |
| 14 | 6 | yes |
| 15 | 6 | yes |
| 16 | 6 | no |
| 17 | 6 | no |
目前我已经尝试过:
df = pd.DataFrame(data={
'id': [3, 3, 3, 3, 3, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6],
'outcome': ['no', 'no', 'no', 'yes', 'no', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no', 'no']
})
m1 = df.groupby(['id'])['outcome'].head() != 'yes'
df = df.drop(m1[m1].index)
m2 = df.groupby(['id'])['outcome'].tail() != 'no'
df = df.drop(m2[m2].index)
print(df)
如果我在 head() 和 tail() 中添加 1,这只会删除最后一个值,而不是前面的值。有什么建议吗?
【问题讨论】:
标签: python pandas dataframe numpy time-series