如何聚合数据框以将某些列值保留在单独的单元格中?

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

我正在使用Python。我有一个数据框:

# Sample DataFrame
data = {
    'sto_num': [1, 1, 1, 2, 2, 3, 3],
    'sto_text': ['ab', 'ab', 'ab', 'k', 'k', 'b', 'b'],
    'tu_num': [2.2, 2.6, 3.5, 1.2, 1.3, 5.2, 5.1],
    'compliance': ['С', 'Н', 'Ч', 'С', 'Н', 'С', 'Ч'],
    'comment': ['с1', 'н1', 'ч1', 'с2', 'н2', 'с3', 'ч3']
}
sto_num        sto_text         tu_num          compliance               comment
1                 ab              2.2                С                     с1
-----------------------------------------------------------
1                 ab              2.6                Н                     н1
-----------------------------------------------------------
1                 ab              3.5                Ч                     ч1
-----------------------------------------------------------
2                  k                1.2                С                     с2
-----------------------------------------------------------
2                  k                1.3                Н                     н2
-----------------------------------------------------------
3                  b               5.2                С                     с3
-----------------------------------------------------------
3                  b               5.1                Ч                     ч3

我编写了这段代码来聚合该数据帧:

df = df.groupby('sto_num').agg({
                        'sto_text': 'first',  # Assuming 'sto_text' is the same for each 'sto_num'
                        'tu_num': lambda x: '\n\n'.join(map(str, x)),
                        'compliance': lambda x: determine_compliance(x.tolist()),
                        'comment': lambda x: '\n\n'.join(map(str, x))
                    }).reset_index()

我想聚合它,这样 tu_num、tu_text 和某个 sto_num 组的注释不会加入到一个单元格中,而是位于数据帧的不同单元格中。所以想要的结果看起来像这样:

sto_num    sto_text                     tu_num         compliance               comment
1                 ab                     2.2                                      с1
           ------------------------   ------------                        ------------------
                  ab                     2.6                                      н1
           ------------------------   ------------                        ------------------
                  ab                     3.5                Ч                     ч1
-----------------------------------------------------------
....

如何做到这一点?数据框是否可以像 Excel 那样针对不同的列具有不同的行数?

我还没有找到什么好的解决办法

python python-3.x dataframe aggregate aggregate-functions
1个回答
0
投票

如何做到这一点?数据框是否可以像 Excel 中那样针对不同的列具有不同的行数?

不,这在 Pandas 中是不可能的。

但是,您可以扩展数据框,有点像这样:

expanded_rows = []
for _, group in df.groupby('sto_num'):
    for i in range(len(group)):
        row = group.iloc[i].copy()
        if i > 0:
            row['sto_text'] = ''
        expanded_rows.append(row)

expanded_df = pd.DataFrame(expanded_rows)

这将产生一个数据框,其中

sto_text
列仅填充每个
sto_num
组的第一行:

   sto_num sto_text  tu_num compliance comment
0        1       ab     2.2          С      с1
1        1              2.6          Н      н1
2        1              3.5          Ч      ч1
3        2        k     1.2          С      с2
4        2              1.3          Н      н2
5        3        b     5.2          С      с3
6        3              5.1          Ч      ч3
© www.soinside.com 2019 - 2024. All rights reserved.