我有一个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 |
任何帮助将不胜感激!
答案 0 :(得分:4)
使用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()