代码之家  ›  专栏  ›  技术社区  ›  Chicken Sandwich No Pickles

Pandas Dataframe整列到String数据类型

  •  1
  • Chicken Sandwich No Pickles  · 技术社区  · 4 年前

    我知道你可以用一个序列来做这个,但我似乎不能用数据帧来做这个。

         name     note                     age
    0    jon      likes beer on tuesdays      10
    1    jon      likes beer on tuesdays
    2    steve    tonight we dine in heck     20
    3    steve    tonight we dine in heck
    

         name     note                     age
    0    jon      likes beer on tuesdays      10
    1    jon      likes beer on tuesdays      10
    2    steve    tonight we dine in heck     20
    3    steve    tonight we dine in heck     20
    

    我知道如何使用groupby和join来处理字符串值,但这只适用于字符串值。我在将整个age列转换为dataframe中的string数据类型时遇到问题。

    有什么建议吗?

    1 回复  |  直到 4 年前
        1
  •  2
  •   jezrael    4 年前

    使用 GroupBy.first 具有 GroupBy.transform

    g = df.groupby('name')
    df['note'] = g['note'].transform(' '.join)
    df['age'] = g['age'].transform('first') 
    

    first 所有的字符串都可以通过join生成字典,通过列名和函数,传递给 GroupBy.agg 最后一次使用 DataFrame.join

    cols1 = df.select_dtypes(np.number).columns
    cols2 = df.columns.difference(cols1).difference(['name'])
    d1 = dict.fromkeys(cols2, lambda x: ' '.join(x))
    d2 = dict.fromkeys(cols1, 'first')
    d = {**d1, **d2}
    df1 = df[['name']].join(df.groupby('name').agg(d), on='name')