vic*_*tor 7 python pivot dataframe pandas
这是一个简单的数据帧:
> df = pd.DataFrame({'a': ['a1', 'a2', 'a3'],
'b': ['optional1', None, 'optional3'],
'c': ['c1', 'c2', 'c3'],
'd': [1, 2, 3]})
> df
a b c d
0 a1 optional1 c1 1
1 a2 None c2 2
2 a3 optional3 c3 3
Run Code Online (Sandbox Code Playgroud)
数据可以转为:
> df.pivot_table(index=['a','b'], columns='c')
d
c c1 c3
a b
a1 optional1 1.0 NaN
a3 optional3 NaN 3.0
Run Code Online (Sandbox Code Playgroud)
缺点:第 2 行中的数据丢失,因为df['b'][1] == None.
> df.pivot_table(index=['a'], columns='c')
d
c c1 c2 c3
a
a1 1.0 NaN NaN
a2 NaN 2.0 NaN
a3 NaN NaN 3.0
Run Code Online (Sandbox Code Playgroud)
缺点:色谱柱b丢失。
如何将这两种方法结合起来,使列b和第二行保持如下:
d
c c1 c2 c3
a b
a1 optional1 1.0 NaN NaN
a2 None NaN 2.0 NaN
a3 optional3 NaN NaN 3.0
Run Code Online (Sandbox Code Playgroud)
更一般地:如果键有NaN值,如何在透视期间保留行中的信息?
使用set_index和unstack执行旋转:
df = df.set_index(['a', 'b', 'c']).unstack('c')
Run Code Online (Sandbox Code Playgroud)
这本质上就是 pandas在幕后所做的事情pivot。和方法stack与,unstack密切相关pivot,通常可用于执行与内置枢轴函数不太相符的类似枢轴的操作。
结果输出:
d
c c1 c2 c3
a b
a1 optional1 1.0 NaN NaN
a2 NaN NaN 2.0 NaN
a3 optional3 NaN NaN 3.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3384 次 |
| 最近记录: |