为了账号安全,请及时绑定邮箱和手机立即绑定

python中有没有一种方法可以过滤字典中的所有数据帧

python中有没有一种方法可以过滤字典中的所有数据帧

富国沪深 2023-06-20 10:18:41
我有一本字典,它以 excel 名称作为键,以其内容作为值。我基本上有一个由多个数据帧组成的字典。现在我想根据特定特征过滤这本字典(以及其中的所有数据框)。例如:dictionary = {'contact':     ID  companyID   Anrede  Titel   firstname   surname0   3025    2705    Mrs.    Sam Smith1   3026    2706    Mr.     Michael Smith2   3027    2710    Mr.     Christian   Peterson,'geography':    ID  companyID randomID  ContinentID0   1   3060    0   1.01   6   3060    2   1.02   7   2710    0   1.03   24  7530    0   6.04   28  3759    0   6.0,...}抱歉,我不知道如何正确显示它。希望你明白其中的原理。现在我想通过 companyID 或什至通过姓氏来过滤它......姓氏对我来说特别奇怪——难道不应该有一种方法可以通过 companyID 连接这些数据框,然后轻松地按姓氏过滤它,这意味着我只看到所有输入,例如他们有人使用名字 Smith .先感谢您!
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

最好根据“ID”或“companyID”将多个数据帧合并为一个,然后执行过滤。您可以通过“companyID”合并它们,如下所示。


final_df = None

for key, value in dictionary.items():

    value = value.set_index(['ID', 'companyID'])

    # add an extra level of column where the level is the key from dict

    value.columns = pd.MultiIndex.from_product([[key], value.columns])

    if not type(final_df) == pd.DataFrame:

        final_df = value

    else:

        final_df = final_df.merge(value, left_index=True, right_index=True, how='outer')

Out:

             contact                            geography            

              Anrede Titel  firstname   surname  randomID ContinentID

ID companyID                                                         

0  3025       2705.0  Mrs.        Sam     Smith       NaN         NaN

1  3026       2706.0   Mr.    Michael     Smith       NaN         NaN

   3060          NaN   NaN        NaN       NaN       0.0         1.0

2  3027       2710.0   Mr.  Christian  Peterson       NaN         NaN

6  3060          NaN   NaN        NaN       NaN       2.0         1.0

7  2710          NaN   NaN        NaN       NaN       0.0         1.0

24 7530          NaN   NaN        NaN       NaN       0.0         6.0

28 3759          NaN   NaN        NaN       NaN       0.0         6.0

s很少,NaN因为您在每个数据框中都没有匹配的索引。我希望您的实际数据更加连贯。一旦你有了这个“合并”数据框,你就可以过滤你喜欢的任何列。


解释


您有不同的列“集”,它们在字典中表示为单独的键值对。我假设您想将这些数据帧与“ID”和“companyID”合并为某种索引。这就是上面的代码所实现的。它还添加了一个额外的列索引级别来表示列集来自哪个“键”。


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信