将多列附加到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 - 我认为NoneNonetype,堆栈删除它们,所以没有,没有必要.. 好吧,我以为 stack 只会删除 NaN 值。 知道了。感谢@jezrael 提供的信息。 【参考方案1】:

使用df.meltdf.replaceNone 值替换为NaNdf.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,同时保留其他列值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将多列合并为一个新列,同时保留原始列

在保留标题的同时附加 2 个数据集

自[重复]以来如何“撤消”git提交同时保留所有其他提交

数据库怎样删除多条重复数据保留一条?

如何在保留所有其他工作表的同时覆盖现有 Excel 工作表上的数据?

在 Pandas 中翻转数据框并将一列值保留为新行值 [重复]