在保留其他列值的同时将多个列附加到df

时间:2020-11-11 05:46:03

标签: python pandas dataframe

我有一个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  | 

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

使用df.meltdf.replaceNone的值替换为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()