【问题标题】:How to combine sparse rows in a pandas dataframe如何在熊猫数据框中组合稀疏行
【发布时间】:2017-08-10 03:41:44
【问题描述】:

假设我有一个熊猫数据框:

In [1]: import pandas as pd

...

In [4]: df

Out[3]:
  Person_ID First_Name Last_Name  Phone_Number              Email
1      A456       John       Doe          None               None
2      A456       John       Doe  123-123-1234  john.doe@test.com
3      A890        Joe      Dirt  321-321-4321               None
4      A890        Joe      Dirt          None      joe@email.com

我想进行一些转换以将其变成这样:

  Person_ID First_Name Last_Name  Phone_Number              Email
1      A456       John       Doe  123-123-1234  john.doe@test.com
2      A890        Joe      Dirt  321-321-4321      joe@email.com

即我希望能够获取一个数据框,该数据框可能具有与同一个人相对应的多行数据(并共享一个 Person_ID),但在不同的地方缺少条目,并将这些条目组合成包含所有信息的行。

重要的是,这不仅仅是过滤掉具有更多 None 值的行的任务,例如在我的玩具示例中,第 3 行和第 4 行具有相同数量的 None,但数据是分布在不同的地方。

有人对如何进行此操作有建议吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    尝试groupbyfillna 与方法ffillbfill 然后drop_duplicates

    df1 = df.groupby('Person_ID').apply(lambda x: x.ffill().bfill()).drop_duplicates()
    print (df1)
      Person_ID First_Name Last_Name  Phone_Number              Email
    1      A456       John       Doe  123-123-1234  john.doe@test.com
    3      A890        Joe      Dirt  321-321-4321      joe@email.com
    

    【讨论】:

    • 哇,真快!非常感谢。
    【解决方案2】:

    你可以

    In [1571]: df.groupby('Person_ID', as_index=False).apply(
                          lambda x: x.ffill().bfill().iloc[0])
    Out[1571]:
      Person_ID First_Name Last_Name  Phone_Number              Email
    0      A456       John       Doe  123-123-1234  john.doe@test.com
    1      A890        Joe      Dirt  321-321-4321      joe@email.com
    

    【讨论】:

    • 我们需要ffillbfill 吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2014-05-06
    • 1970-01-01
    • 2021-12-14
    • 2018-04-28
    • 2018-05-25
    • 2016-09-02
    • 2017-02-22
    相关资源
    最近更新 更多