代码之家  ›  专栏  ›  技术社区  ›  Michael

填充列`熊猫.DataFrame`基于其他列中的匹配项

  •  2
  • Michael  · 技术社区  · 5 年前

    pd.DataFrame 对象,该对象包含来自不同用户的tweet和re tweets。我要完成的是填充 rt_uid (即转发用户id)与相应的 uid 正在被转发的用户。因此,期望的输出将是:

    期望输出

       tw_id  tw_uid  rt_uid tw_uname rt_uname
    0      0      10    12.0       u1       u3
    1      1      10    12.0       u1       u3
    2      2      12     NaN       u3     None
    3      3      13     NaN       u4     None
    4      4      14    10.0       u5       u1
    5      5      15    10.0       u6       u1
    6      6      16    10.0       u7       u1
    7      7      16     NaN       u7     None
    8      8      16     NaN       u7     None
    9      9      12    13.0       u3       u4
    

    专栏 资源 包含预先转发的用户的用户ID。

    Code 1 提供了一个数据集的玩具示例,其中包含我的解决方案,但没有成功:

    代码1

    import pandas as pd
    
    
    tw_df = pd.DataFrame(dict(
            tw_id=np.arange(10),
            tw_uid=[10, 10, 12, 13, 14, 15, 16, 16, 16, 12],
            rt_uid=[None]*10,
            tw_uname=['u1', 'u1', 'u3', 'u4', 'u5', 'u6', 'u7', 'u7', 'u7', 'u3'],
            rt_uname=['u3', 'u3', None, None, 'u1', 'u1', 'u1', None, None, 'u4'],
        )
    )
    tw_df.loc[~tw_df.loc[:, 'rt_uname'].isnull(), 'rt_uid'] = tw_df.loc[tw_df.loc[:, 'tw_uname'].isin(tw_df.loc[:, 'rt_uname']), 'tw_uid']
    tw_df
    

    输出错误

    enter image description here

    如你所见 资源 列仅包含镜像 tw_uid 列。

    我错过了什么?提前谢谢。

    1 回复  |  直到 5 年前
        1
  •  2
  •   wwnde    5 年前

    创建字典 tw_uname tw_uid 使用 dict(zip()) rt_uname

    tw_df['rt_uid']=tw_df['rt_uname'].map(dict(zip(tw_df.tw_uname,tw_df.tw_uid)))
    
    
    
     tw_id  tw_uid  rt_uid tw_uname rt_uname
    0      0      10    12.0       u1       u3
    1      1      10    12.0       u1       u3
    2      2      12     NaN       u3     None
    3      3      13     NaN       u4     None
    4      4      14    10.0       u5       u1
    5      5      15    10.0       u6       u1
    6      6      16    10.0       u7       u1
    7      7      16     NaN       u7     None
    8      8      16     NaN       u7     None
    9      9      12    13.0       u3       u4