我有一个Pandas 数据框,它代表了我为工作而进行的旅行.每一行都是一次旅行,其中有一列是日期和旅行公里数.

除了每天的第一天和最后一天(这些被认为是正常的上下班旅行),我的每次旅行都会得到每公里的报销.

所以我的数据框看起来像这样:

day, distance
1, 5
1, 2
1, 7
2, 11
2, 11
3, 4
3, 10
3, 5
3, 12

我想在这里添加一个专栏,除了一天中的第一次和最后一次旅行之外,其他所有旅行都会被标记出来.例如:

day, distance, claimable
1, 5, 0
1, 2, 1
1, 7, 0
2, 11, 0
2, 11, 0
3, 4, 0
3, 10, 1
3, 5, 1
3, 12, 0

假设我有一个带有上述列的数据框架,有没有一种方法可以做到这样:

import pandas as pd

df = pd.DataFrame({'day':(1,1,1,2,2,3,3,3,3),
                   'dist':(5,2,7,11,11,4,10,5,12),
                  },)
df['claim'] = 0

# set the value of the "claimable" column to 1 on all 
# but the first and last trip of the day

df.groupby("day").nth(slice(1,-1)).loc[:, "claim"] = 1

推荐答案

你可以用transform

df = pd.DataFrame({
    'day':(1,1,1,2,2,3,3,3,3),
    'dist':(5,2,7,11,11,4,10,5,12),
})

def is_claimable(group):
    claim = np.ones(len(group), dtype='int8')
    claim[[0, -1]] = 0
    return claim

df['claim'] = df.groupby("day")['dist'].transform(is_claimable)

输出:

>>> df

   day  dist  claim
0    1     5      0
1    1     2      1
2    1     7      0
3    2    11      0
4    2    11      0
5    3     4      0
6    3    10      1
7    3     5      1
8    3    12      0

Python相关问答推荐

从流程获取定期更新

Python中的锁定类和线程以实现dict移动

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

定义同侪组并计算同侪组分析

如何匹配3D圆柱体的轴和半径?

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

Python主进程和分支进程如何共享gc信息?

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

根据在同一数据框中的查找向数据框添加值

抓取rotowire MLB球员新闻并使用Python形成表格

Python中的嵌套Ruby哈希

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

数据抓取失败:寻求帮助

如何创建一个缓冲区周围的一行与manim?

python中字符串的条件替换

如何使用SentenceTransformers创建矢量嵌入?

在pandas/python中计数嵌套类别

OpenCV轮廓.很难找到给定图像的所需轮廓