如何折叠/压缩/减少pandas中的字符串列

2024-04-26 10:46:30 发布

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

本质上,我要做的是使用一个键将表\u A连接到表\u B,在表\u B中进行查找,以获取表\u A中存在的名称的列记录

Table_B可以被认为是主名称表,它存储有关名称的各种属性。表_A表示带有名称信息的传入数据。

有两个列表示一个名称—一个名为“raw_name”的列和一个名为“real_name”的列。“原始名称”在实际名称之前有字符串“code”。

raw_name = CE993_VincentHanna

real_name = VincentHanna

Key=real_name,存在于表\u A和表\u B中

请在此处查看mySQL表和查询:http://sqlfiddle.com/#!9/65e13/1

对于表2中不存在的所有实名,我希望将原始名/实名对存储到一个对象中,这样我就可以向数据输入人员发送警报,以便手动插入。

对于表_A中确实存在于表\u B中的所有实名,这意味着我们知道该名称,并可以将与该实名关联的新原始名添加到主表中

在mySQL中,这很容易实现,正如您在sqlfidde示例中看到的那样。我在real_name上加入并通过groupbya.real_name压缩/折叠结果,因为我不在乎表_B中是否存在同一个实名的多个记录。

我只想提取属性(stats1、stats2、stats3),这样我就可以将它们分配给新发现的原始名称。

在mySQL查询结果中,我可以将要发送的空记录分开进行手动数据输入,并自动将剩余的记录插入到表\u B中

现在,我也在尝试在Pandas上做同样的事情,但我还是停留在groupby on实名上。

^{pr2}$

现在我如何压缩/折叠dfünew_中的组,就像我在mySQL中那样按实名分组。

一旦我有了一个具有折叠结果的对象,我就可以对数据帧进行切片,以报告我们没有记录(空值)的真实姓名,以及那些我们已经知道并可以存储新发现的原始姓名的姓名。


Tags: 数据对象name名称信息raw属性记录
2条回答

您可以基于列raw_name_left删除重复项,也可以使用drop删除{}列

In [99]: df_new.drop_duplicates('raw_name_left').drop('raw_name_right', 1)
Out[99]:
            raw_name_left        real_name    stats1    stats2    stats3
0           AW103_Waingro          Waingro       NaN       NaN       NaN
1      CE993_VincentHanna     VincentHanna      meh1      meh2      meh3
3      EES43_NeilMcCauley     NeilMcCauley       yo1       yo2       yo3
6    SME16_ChrisShiherlis   ChrisShiherlis    hello1    hello2    hello3
7   MEC14_MichaelCheritto  MichaelCheritto      bye1      bye2      bye3
9      OTP23_RogerVanZant     RogerVanZant  namaste1  namaste2  namaste3
11    MDU232_AlanMarciano     AlanMarciano       NaN       NaN       NaN

为了更彻底,这也可以使用Groupby来完成,我在Wes McKinney的博客上找到了它,尽管drop\u duplicates更干净、更高效。在

http://wesmckinney.com/blog/filtering-out-duplicate-dataframe-rows/

>index = [gp_keys[0] for gp_keys in df_new_grouped.groups.values()]
>unique_df = df_new.reindex(index)
>unique_df

相关问题 更多 >