Pandas在合并两个数据帧后创建多值字段

2024-04-28 23:55:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,它根据键/外键合并到csv表中。由于关系有时是1 : n,因此我的输出数据包含每个n的新行

我想要的是在新的外键列中有多个值字段的单行。在

为了更好地理解,一些示例数据:

CSV1型

cid;name;surname;address
1;Mueller;Hans;42553
2;Meier;Peter;42873
3;Schmidt;Micha;42567
4;Pauli;Ulli;98790
5;Dick;Franz;45632

CSV2型

^{pr2}$

期望输出:

cid;name;surname;address;ticketid
1;Mueller;Hans;42553;[9;22]
2;Meier;Peter;42873;[8]
3;Schmidt;Micha;42567;[7]
4;Pauli;Ulli;98790;[6]
5;Dick;Franz;45632;[5]

我当前的合并代码:

df1 = pd.read_csv('kunde.csv', sep=';', header=0, dtype=object)
df2 = pd.read_csv('tickets.csv', sep=';', header=0, dtype=object, na_values='')


df = (df1.merge(df2, left_on='cid', right_on='cid', suffixes=('', '_B'), how='left'))

我找到了一些使用groupby的例子。但是对于我的例子来说,另一个问题是脚本需要有一定的通用性,我需要假设我只知道执行连接的两个ID列的名称,而不是所有的列名。因此,大多数示例不适用于我的情况,也不适用于为所有非ID列创建多值字段


Tags: csv数据name脚本示例addresssurname外键
1条回答
网友
1楼 · 发布于 2024-04-28 23:55:11

我认为每组需要^{}和{a2}和{}s:

df1['ticketid'] = df1['cid'].map(df2.groupby('cid')['ticketid'].apply(list))
print (df1)
   cid     name surname  address ticketid
0    1  Mueller    Hans    42553  [9, 22]
1    2    Meier   Peter    42873      [8]
2    3  Schmidt   Micha    42567      [7]
3    4    Pauli    Ulli    98790      [6]
4    5     Dick   Franz    45632      [5]

编辑:使用^{}和将所有列聚合到lists的更一般的解决方案:

^{pr2}$

相关问题 更多 >