【问题标题】:Combining values in certain rows columnwise (in pandas)按列组合某些行中的值(在熊猫中)
【发布时间】:2016-12-13 18:28:17
【问题描述】:

对于我需要在 pandas 中做的事情,我仍然没有找到合适的工具。 它可能需要 groupby(),但我无法在文档或网络上找到 Python 方式(或任何其他方式)。

我有一个包含类似结构数据的表(30-50 列):

ID   name  Town     s1       s2       s3       s4

21   Joe   Bonn     rd       fd       NaN      aa
21   Joe   Bonn     NaN      hg       kk       NaN
22   Ann   Oslo     jg       hg       zt       uz
29   Mya   Rome     rd       fd       NaN      aa

我想合并具有相同 ID(即索引)的行,合并行中的值而不重复,形成一种字符串值的联合。

所以结果是:

21   Joe   Bonn     rd       fd,hg    kk       aa
22   Ann   Oslo     jg       hg       zt       uz
29   Mya   Rome     rd       fd       NaN      aa

df.groupby(df.index).sum() 是一种猜测,但它只是在每个索引旁边给出一个 NaN。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    可以尝试这样的事情,您需要在使用 join 函数之前删除缺失值:

    df.groupby(["ID", "name", "Town"], as_index=False).agg(lambda col: ','.join(col.dropna()))
    
    #   ID  name    Town    s1     s2    s3    s4
    #0  21   Joe    Bonn    rd  fd,hg    kk    aa
    #1  22   Ann    Oslo    jg     hg    zt    uz
    #2  29   Mya    Rome    rd     fd          aa
    

    【讨论】:

    • 非常感谢!最后,这几乎按照我的预期给出了结果。我只需要按摩 lambda 以避免重复:lambda col: ','.join(numpy.unique(col.dropna()))
    • 顺便说一句,如果您想删除重复项,您也可以使用drop_duplicates() 而无需显式调用numpylambda col: ','.join(col.dropna().drop_duplicates())
    猜你喜欢
    • 2017-09-26
    • 2017-06-26
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2023-03-14
    相关资源
    最近更新 更多