Wil*_*win 7 python numpy reshape pandas
嗨,我在调整我的df时遇到麻烦。
我有:
Netflix TV DVD
0.1 0.2 0.3
0.12 0.5 0.15
0.4 0.6 0.8
0.5 0.41
0.41
0.2
Run Code Online (Sandbox Code Playgroud)
我想将我的df转换为:
Netflix [0.1, 0.12, 0.4]
TV [0.2, 0.5, 0.6, 0.5, 0.41, 0.2]
DVD [0.3, 0.15, 0.8, 0.41]
Run Code Online (Sandbox Code Playgroud)
不知道stack()或ivot()如何在这种df上工作。任何帮助表示赞赏。
stack
重整数组时,堆栈会丢弃空值
df.stack().groupby(level=1).agg(list)
DVD [0.3, 0.15, 0.8, 0.41]
Netflix [0.1, 0.12, 0.4]
TV [0.2, 0.5, 0.6, 0.5, 0.41, 0.2]
dtype: object
Run Code Online (Sandbox Code Playgroud)
删除缺少的值,Series.dropna
并在字典理解中转换为Series:
s = pd.Series({x: df[x].dropna().tolist() for x in df.columns})
print (s)
Netflix [0.1, 0.12, 0.4]
TV [0.2, 0.5, 0.6, 0.5, 0.41, 0.2]
DVD [0.3, 0.15, 0.8, 0.41]
dtype: object
Run Code Online (Sandbox Code Playgroud)
...或在DataFrame.apply
:
s = df.apply(lambda x: x.dropna().tolist())
print (s)
Netflix [0.1, 0.12, 0.4]
TV [0.2, 0.5, 0.6, 0.5, 0.41, 0.2]
DVD [0.3, 0.15, 0.8, 0.41]
dtype: object
Run Code Online (Sandbox Code Playgroud)
最后,如果需要2列DataFrame
:
df1 = s.rename_axis('a').reset_index(name='b')
print (df1)
a b
0 Netflix [0.1, 0.12, 0.4]
1 TV [0.2, 0.5, 0.6, 0.5, 0.41, 0.2]
2 DVD [0.3, 0.15, 0.8, 0.41]
Run Code Online (Sandbox Code Playgroud)