python - 基于列值的 Pandas 重新索引任务

标签 python pandas

我有一个包含数百万行的数据框,这些行具有唯一索引和一个具有多个重复值的列('b')。

我想生成一个没有重复数据的数据框,但我不想丢失索引信息。我希望新数据框有一个索引,该索引是索引 ("old_index1,old_index2") 的串联,其中 'b' 具有重复值,但对于 'b' 具有唯一值的行保持不变。 “b”列的值应保持不变,就像在 keep=first 策略中一样。示例如下。

输入数据框:

df = pd.DataFrame(data = [[1,"non_duplicated_1"],
                          [2,"duplicated"],
                          [2,"duplicated"],
                          [3,"non_duplicated_2"],
                          [4,"non_duplicated_3"]],
                  index=['one','two','three','four','five'],
                  columns=['a','b'])

期望的输出:

             a                 b
one          1  non_duplicated_1
two,three    2        duplicated
four         3  non_duplicated_2
five         4  non_duplicated_3

实际的数据帧非常大,所以我想避免非矢量化操作。

我发现这出奇地困难...有什么想法吗?

最佳答案

您可以在索引列上使用transform(在使用reset_index 之后)。然后,在 b 列中删除重复项:

df.index = df.reset_index().groupby('b')['index'].transform(','.join)

df.drop_duplicates('b',inplace=True)

>>> df
           a                 b
index                         
one        1  non_duplicated_1
two,three  2        duplicated
four       3  non_duplicated_2
five       4  non_duplicated_3

关于python - 基于列值的 Pandas 重新索引任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52844659/

相关文章:

python - 如何在python中将多个Pickle文件合并为一个

python - bash 中的 TCP 客户端

python - 通过 Numpy/Pandas 使用 (n x 1) 数据创建一个 n x m 多项式数组

python - 无法通过 Pandas 中的 lambda 填充多列中的 NaN 值

python - dask:并行模型中的共享内存

python - 将 Pandas DataFrame 中的行对齐到每列的最大值

python - 如果我使用 pip 安装模块,如何确保其他人可以在不安装该模块的情况下运行我的程序?

python - 将具有多种拼写的单词映射到关键字列表的最佳方法?

Python Pandas : use map function on iterator

python - 删除生成数据帧的 groupby-apply 函数的无关索引