python - 熊猫:按值将单元格值分组到各个列中
问题描述
我有一个带有多个偏移列的 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()
推荐阅读
- json - 如何在颤动中将 Json 解码为 DateTime 格式?
- django - 添加额外插件时ckeditor Youtube plugin.js返回404错误不显示?
- css - CSS left 属性的变化没有动画
- excel - 将存储在 excel 文件中的数据和查询移动到外部源(本地)以供其他 excel 文件使用
- arrays - 按周对数组列进行分组
- r - 如何将一组值添加到现有数据框中?
- javascript - 用 Hooks 编写这个 React 类组件的更好方法是什么?
- amazon-web-services - 在后台作业完成之前,使用 Powershell 的 SSM 发送命令不会完成
- android - 如何删除 searchView 图标?
- pandas - 如何在 pandas 中进行分区并输出到 word doc?