【发布时间】:2016-03-15 20:55:58
【问题描述】:
给定以下数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame({'foo':['a','b','c','d'],
'bar':['e','f','g','h'],
0:['i','j','k',np.nan],
1:['m',np.nan,'o','p']})
df=df[['foo','bar',0,1]]
df
foo bar 0 1
0 a e i m
1 b f j NaN
2 c g k o
3 d h NaN p
...这是由产生列 0 和 1 的先前过程产生的(并且可能产生比 0 和 1 更多或更少的列,具体取决于数据):
我想以某种方式堆叠(如果这是正确的术语)数据,以便0 和1 的每个值(忽略NaNs)产生一个像这样的新行:
foo bar
0 a e
0 a i
0 a m
1 b f
1 b j
2 c g
2 c k
2 c o
3 d h
3 d p
您可能注意到公共字段是foo。
在我的实际数据集中可能会出现更多常见字段。
另外,我不确定索引值在foo 的值之间重复的最终结果有多重要。只要数据正确,这就是我主要关心的问题。
更新: 如果我有 2+ 个这样的常见字段怎么办:
import numpy as np
import pandas as pd
df = pd.DataFrame({'foo':['a','a','b','b'],
'foo2':['a2','b2','c2','d2'],
'bar':['e','f','g','h'],
0:['i','j','k',np.nan],
1:['m',np.nan,'o','p']})
df=df[['foo','foo2','bar',0,1]]
df
foo foo2 bar 0 1
0 a a2 e i m
1 a b2 f j NaN
2 b c2 g k o
3 b d2 h NaN p
【问题讨论】:
标签: python-3.x pandas pivot dataframe