根据 pandas 中多列中的单元格值将行合并为 1 个单元格

问题描述 投票:0回答:1

我想去:

Name    idtag   Size    frq
Apple   123     Medium  20
Apple   123     Small   10
Apple   123     Small   5
Grapes  875     Small   50
Grapes  875     Small   60
Grapes  875     Medium  80
Mango   8894    Medium  30
Mango   8894     Small   25
Mango   8894     Small   20

至:

Name    idtag   Size    frq
Apple   123     Medium  20
                Small   10
                Small   5
Grapes  875     Small   50
                Small   60
                Medium  80
Mango   8894    Medium  30
                Small   25
                Small   20

我已经尝试过

df.set_index(['Name','idtag'])

这样我仍然可以得到每一行的 id 标签,希望它们也成为一个单元格,就像在“名称”列中一样

python pandas dataframe
1个回答
0
投票

Pandas 实际上并没有提供单元格合并功能,并且使用

set_index
(您在帖子中所做的)的结果只是使其在视觉上看起来好像单元格已合并,但数据本身并未合并。因此,无法像 Excel 那样单独使用 Pandas 来物理合并单元格。如果您能更具体地解释您正在寻找什么功能,我可以更准确地帮助您。

特定列中的连续数据可以转换为 '' 以使其看起来像是合并的。这可以是一个选择。

代码

cols = ['Name', 'idtag']
df[cols] = df[cols].transform(lambda x: x.where(x.ne(x.shift()), ''))

df:

     Name idtag    Size  frq
0   Apple   123  Medium   20
1                 Small   10
2                 Small    5
3  Grapes   875   Small   50
4                 Small   60
5                Medium   80
6   Mango  8894  Medium   30
7                 Small   25
8                 Small   20

示例代码

import pandas as pd
data = {'Name': ['Apple', 'Apple', 'Apple', 'Grapes', 'Grapes', 'Grapes', 'Mango', 'Mango', 'Mango'], 'idtag': [123, 123, 123, 875, 875, 875, 8894, 8894, 8894], 'Size': ['Medium', 'Small', 'Small', 'Small', 'Small', 'Medium', 'Medium', 'Small', 'Small'], 'frq': [20, 10, 5, 50, 60, 80, 30, 25, 20]}
df = pd.DataFrame(data)
© www.soinside.com 2019 - 2024. All rights reserved.