python - python如何对数据框的对角线求和
问题描述
假设我有这个数据框:
1 2 3 4
100 8 12 5 14
99 1 6 4 3
98 2 5 4 11
97 5 3 7 2
在上述数据框中,这些值表示对 (100, 1)、(99, 1) 等进行多少观察的计数。
在我的上下文中,对角线具有相同的含义:
1 2 3 4
100 A B C D
99 B C D E
98 C D E F
97 D E F G
我将如何在第一个数据框中对对角线求和(即,对相似字母的计数求和)?
这将产生:
group sum
A 8
B 13
C 13
D 28
E 10
F 18
G 2
For example, D is 5+5+4+14
解决方案
如果DataFrame
s 和 columns 中的索引相同,则使用DataFrame.stack
with aggregate sum
:
df = df1.stack().groupby(df2.stack()).sum().rename_axis('group').reset_index(name='sum')
print (df)
group sum
0 A 8
1 B 13
2 C 13
3 D 28
4 E 10
5 F 18
6 G 2
编辑:因为第二个 DataFrame 不存在使用和numpy.diag
翻转:numpy.flipud
sum
#inspired by https://stackoverflow.com/a/59173028/2901002
c = df.to_numpy()
v = [np.sum(np.diag(np.flipud(c), k=i)) for i in range(-len(df) + 1, len(df), 1)]
print(v)
[8, 13, 13, 28, 10, 18, 2]
df = pd.DataFrame({'sum': v})
print (df)
sum
0 8
1 13
2 13
3 28
4 10
5 18
6 2
推荐阅读
- java - 如何将一些属性从 java 代码传递到 jenkins groovy 管道
- c++ - dds delete_contained_entities 共享库中没有名为 A.cpp 的源文件
- node.js - 如果在此 Node.js 上下文中未定义 require,如何使用它?
- python - ValueError:使用序列设置数组元素。我收到提到的 ODEINT 操作数错误。你能帮我吗
- java - 如何在没有用户登录的情况下将 microsoft graph rest apis 用于一个驱动器等脱机?
- python - keras 模型具有良好的准确性和 val acc,但无法预测,甚至无法预测训练数据
- javascript - 使用domtoimage生成的pdf,jspdf与原始HTML页面不同
- flutter - Flutter 改变 body 内容
- google-cloud-dataflow - Google 数据流警告`Rpc 到 InMemory 已完成,但出现错误 ABORTED: Evicted due to staleness`
- spring - 使用 ContentCachingResponseWrapper 提取正文的 Spring 过滤器始终返回 200