如何折叠 pandas 数据框中的行?

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

我有两个数据框。 df.A 有两列,一列包含道路名称,一列包含页码和网格(即 10 A4)。 df.B 将是结果 df,它有两列,一列包含唯一的道路名称,另一列为页码。 df.A 包含重复的道路,因为它们穿过多个网格。(见下文)。

11  ACCESS RAMP    18-C4
12  ACCESS RAMP    13-D2
13  ACCESS RAMP    11-A1
14  ACCESS RAMP    11-A4

如何将这些数据合并到一个新的数据框中,或者合并到同一个数据框中,以便有一行:

入口匝道 18 C4、13 D2、11 A1、11 A4

df.B 有 1564 个条目。 df.A 有 3130

我尝试过循环中的循环和其他几种变体,但我认为我可能缺少索引的东西。我得到的结果是,所有 3000 个值都存储在 1500 行的每一行中,并且只有一个值应用于 df.B 页列,但它会沿着索引向下逐一输入它们,而不是聚合它们。

for st in f_t['street']:
    LV = ''
    for i in df['st_label']:
        if (i==st):
            LV = LV + ', ' + df[GridName']
    f_t['Grids'] = LV

这个会降低索引,但也会复制该值。我错过了什么?

python dataframe for-loop multiple-columns data-cleaning
1个回答
1
投票

我想这可能就是你想要的?

首先我们将一些无意义的数据加载到 dfA 中:

import pandas as pd

data = {
    'road': ['ACCESS RAMP', 'ACCESS RAMP', 'ACCESS RAMP', 'ACCESS RAMP','ACCESS DRIVE', 'ACCESS DRIVE', 'ACCESS DRIVE', 'ACCESS DRIVE'],
    'grid': ['18-C4', '13-D2', '11-A1', '11-A4','19-A4', '11-D1', '9-Z1', '19-D6']
}

dfA = pd.DataFrame(data)

接下来,让我们使用 groupby 函数按道路列对数据框中的信息进行分组,并连接网格列中的所有关联值(在本例中用逗号分隔)。

result_df = dfA.groupby('road')['grid'].agg(', '.join).reset_index()

result_df 看起来像这样:

网格
访问驱动器 19-A4、11-D1、9-Z1、19-D6
通道坡道 18-C4、13-D2、11-A1、11-A4
© www.soinside.com 2019 - 2024. All rights reserved.