首页 > 解决方案 > 熊猫数据框整列到字符串数据类型

问题描述

我知道你可以用一个系列来做到这一点,但我似乎不能用一个数据框来做到这一点。

我有以下内容:

     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

我知道如何使用 group by 和 join 对字符串值执行此操作,但这仅适用于字符串值。我在将整个年龄列转换为数据框中的字符串数据类型时遇到问题。

有什么建议么?

标签: python-3.xpandas

解决方案


如果想重复每组的第一个值,请使用GroupBy.firstGroupBy.transform

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

如果需要处理多个列 - 这意味着所有数字first和所有字符串都可以通过连接生成字典,并通过函数的列名生成字典,传递给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')

推荐阅读