根据另一行的值是不是已被索引,在 pandas 中设置行索引

Posted

技术标签:

【中文标题】根据另一行的值是不是已被索引,在 pandas 中设置行索引【英文标题】:Set row index in pandas based on whether another row's value has already been indexed or not根据另一行的值是否已被索引,在 pandas 中设置行索引 【发布时间】:2022-01-14 08:38:58 【问题描述】:

我想通过 Pandas 完成的是:

    假设我们有一个这样的 Pandas DataFrame:
     transaction_code
1    4373-36
2    3626-68
3    3626-68
4    3281-23
5    4721-44
...
101  6273-56
102  2836-78
103  1657-28
104  3281-23
105  5323-64

我想创建一个名为“transaction_code_new_index”的新列,它将包含与当前现有索引一样的索引,只要一个 transaction_code 重复(即代码 6273-75 可能存在 3 次),我想要索引这些代码对它们来说是相同的(即,对于每个匹配 6273-75 的事务代码,它们的索引必须相同)

例子:

     transaction_code transaction_code_new_index
1    4373-36          1
2    3626-68          2
3    3626-68          2 (because 3626-68 has already been indexed before)
4    3281-23          3
5    4721-44          4
...
101  6273-56          100
102  2836-78          101
103  1657-28          102
104  3281-23          3 (because 3281-23 has already been indexed before)
105  5323-64          103

谢谢。

【问题讨论】:

嘿 Lucca,我建议您查看 pandas groupby 函数:pandas.pydata.org/pandas-docs/stable/reference/api/…。它将允许您执行上述任务以及更多其他任务。 感谢您的提示,迈克尔! :) 【参考方案1】:

您可以获取每个组的最小索引。使用 transform 会将结果分配回相应的行。

df['new_index'] = df.groupby('transaction_code')['transaction_code'].transform(lambda x: x.index.min())

输出

  transaction_code  new_index
1          4373-36          1
2          3626-68          2
3          3626-68          2
4          3281-23          4
5          4721-44          5

【讨论】:

谢谢你,工作就像一个魅力:)

以上是关于根据另一行的值是不是已被索引,在 pandas 中设置行索引的主要内容,如果未能解决你的问题,请参考以下文章

pandas:根据另一列中的值获取与相应索引的确切对应值

pandas 怎么根据另一个dataframe来筛选

06 pandas DataFrame - 数据过滤、NaN处理、统计方法

我想要一个 pandas 脚本根据第一个电子表格中的值将一个 excel 表中的值排列到另一个表中

在不使用索引的情况下替换 pandas DataFrame 中选定单元格的值

如何根据另一行对行进行排序?