我有一个带有多个偏移量列的pandas DataFrame:
0 1 2 3 4 5 6
0 532201 577834 577837 839786 1003273 NaN NaN
1 577834 577837 649835 839786 1003273 NaN NaN
2 577834 577837 649835 839786 1003273 NaN NaN
3 577834 577837 649839 649845 839785 839786.0 1003273.0
4 577834 577837 649839 839786 1003273 NaN NaN
5 577834 577837 649839 839786 1003273 NaN NaN
6 577834 577837 649839 839786 1003273 NaN NaN
在缺失的位置插入NaN,-1或其他值时,是否可以通过单元格的值对列进行有效的分组/排序?
输出:
0 1 2 3 4 5 6 7 8
0 532201 577834 577837 NaN NaN NaN NaN 839786 1003273
1 NaN 577834 577837 649835 NaN NaN NaN 839786 1003273
2 NaN 577834 577837 649835 NaN NaN NaN 839786 1003273
3 NaN 577834 577837 NaN 649839 649845 839785 839786 1003273
4 NaN 577834 577837 NaN 649839 NaN NaN 839786 1003273
5 NaN 577834 577837 NaN 649839 NaN NaN 839786 1003273
6 NaN 577834 577837 NaN 649839 NaN NaN 839786 1003273
列不需要以任何特定的方式进行排序,我只是想为上述每个值创建时间线图。
例如
.
.
.
649839 ========
577837 ================================
577834 ================================
532201 ===
0 1 2 3 4 5 6
您可以使用假人。stack
,创建虚拟变量,并用于max
在行中任何位置创建存在指标。
df1 = pd.get_dummies(df.stack().astype('int64')).max(level=0)
532201 577834 577837 649835 649839 649845 839785 839786 1003273
0 1 1 1 0 0 0 0 1 1
1 0 1 1 1 0 0 0 1 1
2 0 1 1 1 0 0 0 1 1
3 0 1 1 0 1 1 1 1 1
4 0 1 1 0 1 0 0 1 1
5 0 1 1 0 1 0 0 1 1
6 0 1 1 0 1 0 0 1 1
如果要创建类似该图的内容,可以为每个列将虚拟变量乘以不同的常量(因此,它们在绘制时会偏移),将0替换为NaN
,然后针对DataFrame的RangeIndex进行绘制。您可以使用图例来标记线条,也可以使用yticks和标签,因此列标签在y轴上。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(4, 4))
(df1.mul(np.arange(1, df1.shape[1]+1)).replace(0, np.NaN)
.plot(ax=ax, marker='o', legend=False))
plt.yticks(np.arange(1, df1.shape[1]+1, 1))
ax.set_yticklabels(df1.columns)
plt.show()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句