首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据条件拼接同一列的值?

如何根据条件拼接同一列的值?
EN

Stack Overflow用户
提问于 2019-04-23 17:04:56
回答 2查看 355关注 0票数 1

我有一张桌子,看起来像这样-

代码语言:javascript
复制
date        name        values      items
01-03-2019  xyz         900         NaN
NaN         NaN         900         brush
02-03-2019  abc        1200         NaN
NaN         NaN         900         paste
NaN         NaN         300         floss

所需的输出是-

代码语言:javascript
复制
date            name       values        items
01-03-2019      xyz        900           brush
02-03-2019      abc        1200          paste, floss

我知道我可以使用np.where()来使每一项的值为NaN,但是我不知道应该如何进行连接,然后将结果上移到名称旁边。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-23 17:08:21

对第一列使用GroupBy.agg,使用ffill向前填充缺少的值和字典,字典是动态创建的-对于没有dateitems的每一列,应用聚合函数GroupBy.first,对于最后一列,使用join,删除缺少的值:

代码语言:javascript
复制
d = dict.fromkeys(df.columns.difference(['date','items']), 'first')
d['items'] = lambda x: ', '.join(x.dropna())
df = df.groupby(df['date'].ffill()).agg(d).reset_index()
print (df)
         date name  values         items
0  01-03-2019  xyz     900         brush
1  02-03-2019  abc    1200  paste, floss

如果可能只有几列,则使用ffill将2列传递给groupby,并将create dictionary传递给agg

代码语言:javascript
复制
df = (df.groupby([df['date'].ffill(), df['name'].ffill()])
       .agg({'values':'first', 'items':lambda x: ', '.join(x.dropna())})
       .reset_index())
print (df)
         date name  values         items
0  01-03-2019  xyz     900         brush
1  02-03-2019  abc    1200  paste, floss
票数 2
EN

Stack Overflow用户

发布于 2019-04-23 17:17:46

我们可以在forwardfill (ffill)中使用fillna。然后使用dropna,同时使用groupbyagg来获取值的sum并连接项目中的字符串:

代码语言:javascript
复制
df[['date', 'name']] = df[['date', 'name']].fillna(method='ffill')

df = df.dropna().groupby('date').agg({'name':'first',
                                      'values':'sum',
                                      'items':', '.join}).reset_index()

print(df)
         date name  values         items
0  01-03-2019  xyz     900         brush
1  02-03-2019  abc    1200  paste, floss
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55807752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档