python - 堆叠数据框和排名
问题描述
在问题中找不到我需要的东西,如果我错了,请纠正我。我有许多形状相似且可能包含 nans 的 dfs。假设不包含 nans 的 df 如下所示:
np.random.seed(1)
mat = lambda: np.random.normal(size=10).reshape((5, 2))
df1 = pd.DataFrame(mat())
df2 = pd.DataFrame(mat())
df3 = pd.DataFrame(mat())
我想以某种方式将df1
,df2
和堆叠df3
在一起。然后跨df1
, df2
, df3
(即堆栈级别)对每个值进行排名。
因此,在这种情况下,单个 dfs 将如下所示:
df1
df2
df3
所以在这种情况下,在 " .iloc[0, 0]
" 我们有值:1.62、1.46 和 -1.1,所以排名df1
将具有 value 3
,df2
将具有 value2
并将df3
具有 value 1
。然后对跨数据帧级别的每个值执行此排名。一般情况下,大约有 16 个数据帧堆叠在一起,只有 5 个等级,当有 nan 时,df 的等级为 0。
解决方案
我认为您concat
需要GroupBy.rank
:
df1.loc[0,1] = np.nan
df = pd.concat([df1, df2, df3], keys=('df1','df2','df3')).groupby(level=1).rank().fillna(0)
print (df)
0 1
df1 0 3.0 0.0
1 1.0 1.0
2 1.0 1.0
3 3.0 3.0
4 3.0 1.0
df2 0 2.0 1.0
1 2.0 2.0
2 3.0 2.0
3 1.0 2.0
4 2.0 3.0
df3 0 1.0 2.0
1 3.0 3.0
2 2.0 3.0
3 2.0 1.0
4 1.0 2.0
推荐阅读
- javascript - 函数仅返回初始化值 - Javascript
- bash - Bash脚本使用awk或sed将文件中的特定行或行移动到其他行?
- css - 当其父元素按比例放大时,如何将子元素的比例明显反转为未转换
- pandas - 如何将inf修改为索引
- firebase - Firestore 集合组安全规则:数组包含任何
- c# - CSOM 调用 GetImagePreviewUrl 返回 Object 但值为空
- mysql - 如何在 yairEO/tagify 上使用动态白名单?
- r - ggplot geom_tile 相关图混合排序轴刻度标签创建奇怪的图
- sql - 在 VBA Access 中比较日期
- java - 在java中查找系统时区是提前还是落后于UTC