根据其他单元格值将数据添加到单元格

时间:2020-05-12 19:22:58

标签: python python-3.x pandas

在一个大型数据框中,我有一大堆具有不同名称和来源的数据。

Anshul Jain的可复制数据

First_Name  Last_Name   Source
      Matt      Jones       XX
     James      Smith       YY
     Smith     Weston       AA
    Weston  Supermare       CC
      Matt      Jones       YY
    Weston  Supermare       FF

# copy in with:
df = pd.read_clipboard(sep='\\s+')

数据如下:

+------------+-----------+--------+
| First Name | Last Name | Source |
+------------+-----------+--------+
| Matt       | Jones     | XX     |
| James      | Smith     | YY     |
| Smith      | Weston    | AA     |
| Weston     | Supermare | CC     |
| Matt       | Jones     | YY     |
| Weston     | Supermare | FF     |
+------------+-----------+--------+

我需要它看起来像这样:

+------------+-----------+--------+
| First Name | Last Name | Source |
+------------+-----------+--------+
| Matt       | Jones     | XX, YY |
| James      | Smith     | YY     |
| Smith      | Weston    | AA     |
| Weston     | Supermare | CC, FF |
+------------+-----------+--------+

我可以使用以下方法来执行重复数据删除过程:

Conn_df = Conn_df.drop_duplicates(subset=['First Name', 'Last Name'])

但是,在进行重复数据删除之前,我需要将同一数据的所有源记录在同一行上。

2 个答案:

答案 0 :(得分:2)

您可以使用DataFrame.groupby将数据帧按列First NameLast Name分组,然后在{{1}上应用agg函数join }列。

使用:

Source

此打印:

result = Conn_df.groupby(["First Name", "Last Name"])["Source"].agg(', '.join).reset_index()
print(result)

答案 1 :(得分:2)

执行此操作:

print(df.groupby(by=['FirstName', 'LastName']).agg(lambda x: ', '.join(x)))
FirstName LastName
James     Smith          YY
Matt      Jones      XX, YY
Smith     Weston         AA
Weston    Supermare  CC, FF