将多列附加到df,同时保留其他列值[重复]
Posted
技术标签:
【中文标题】将多列附加到df,同时保留其他列值[重复]【英文标题】:append multiple columns to df while keeping other column values [duplicate] 【发布时间】:2021-02-23 02:41:04 【问题描述】:我有一个 df,其中有多个作者与一个标题和位置相关联:
title | location | author 1 | author 2 | author 3
---------------------------------------------------
A | US | jon smit| johnny | brad
B | Asia | Kenny lee| None | None
C | Europe | gutentag | bonjour | None
我希望输出忽略任何 None 值,看起来像:
title | location | author |
-----------------------------
A | US | jon smit|
A | US | johnny |
A | US | brad |
B | Asia | Kenny lee|
C | Europe | gutentag |
C | Europe | bonjour |
任何帮助将不胜感激!
【问题讨论】:
点赞df = df.set_index(['title','location']).stack().reset_index(level=2, drop=True).reset_index(name='author')
@jezrael 还需要删除 None
值。出于这个原因,我只回答了这个问题。
@MayankPorwal - 我认为None
是Nonetype
,堆栈删除它们,所以没有,没有必要..
好吧,我以为 stack
只会删除 NaN
值。
知道了。感谢@jezrael 提供的信息。
【参考方案1】:
使用df.melt
和df.replace
将None
值替换为NaN
和df.dropna
以删除NaN
。
最后,使用df.sort_values
对列title
上的行进行排序:
In [1414]: import numpy as np
In [1415]: x = df.melt(id_vars=['title', 'location'], value_name='author')[['title', 'location', 'author']].replace('None', np.nan).dropna().sort_values('title')
In [1416]: x
Out[1416]:
title location author
0 A US jon smit
3 A US johnny
6 A US brad
1 B Asia Kenny lee
2 C Europe gutentag
5 C Europe bonjour
或:如果您的 None
值为 Nonetype
而不是 strings
,则不需要 replace
。
x = d.melt(id_vars=["title", "location"], value_name="author")[
["title", "location", "author"]
].dropna()
【讨论】:
以上是关于将多列附加到df,同时保留其他列值[重复]的主要内容,如果未能解决你的问题,请参考以下文章