【发布时间】:2020-03-10 15:47:33
【问题描述】:
我想计算一组 Pandas Dataframe 中的一行是否位于组的开头、中间或结尾(该组已排序,其中一列是每组的行索引)。我正在考虑编写一个 UDF 并将其应用于每个组,但我不知道如何迭代组的相关列的行,然后将位置分配给一个新列。
我有以下 UDF:
def add_position_within_group(self,group):
length_of_group = group['group_index'].max()
three_lists = self.split_lists_into_three_parts(range(length_of_group))
for x in group:
if x["group_index"] in three_lists[0]:
x["position_in_sequence"] ="start"
elif x["group_index"] in three_lists[1]:
x["position_in_sequence"] ="middle"
elif x["group_index"] in three_lists[2]:
x["position_in_sequence"] ="end"
我计划在调用 groupby 后应用到每个组,但我不确定“for x in group”是否是迭代组中行的正确方法,或者 x["position_in_sequence"] = “开始”是为该行填充新列的正确方法。
【问题讨论】:
-
请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题
-
df['new_col'] = df.groupby('group_name').cumcount()? -
@anky 我编辑了问题以使其更具体
-
@Quang Hong 我不想要累积计数,而是想要组中行的位置,即“开始”、“中间”或“结束”。我有一个函数可以为我提供这些类别,因此我需要将其应用于每一行并将该行的结果保存在新列中。
-
你不能从
cumcount得到那个吗?
标签: python pandas dataframe group-by