pandas - 数据框中列的配对差异以生成具有 130 万列的数据框
问题描述
我有一个包含 1600 列的数据框。
数据框df
看起来像列名的位置1, 3 , 2
:
Row Labels 1 3 2
41730Type1 9 6 5
41730Type2 14 12 20
41731Type1 2 15 5
41731Type2 3 20 12
41732Type1 8 10 5
41732Type2 8 18 16
df2
我需要以python方式创建以下数据框:
Row Labels (1, 2) (1, 3) (2, 3)
41730Type1 -4 -3 1
41730Type2 6 -2 -8
41731Type1 3 13 10
41731Type2 9 17 8
41732Type1 -3 2 5
41732Type2 8 10 2
egcolumn (1, 2)
是由哪里创建的df[2] - df[1]
的列名称df2
是通过配对列标题来创建的,df1
这样每个名称的第二个元素大于第一个,例如(1, 2), (1, 3), (2, 3)
第二个挑战是 pandas 数据框能支持 130 万列吗?
解决方案
我们可以combinations
为 column 做,然后创建dict
并concat
返回
import itertools
l=itertools.combinations(df.columns,2)
d={'{0[0]}|{0[1]}'.format(x) : df[x[0]]-df[x[1]] for x in [*l] }
newdf=pd.concat(d,axis=1)
1|3 1|2 3|2
RowLabels
41730Type1 3 4 1
41730Type2 2 -6 -8
41731Type1 -13 -3 10
41731Type2 -17 -9 8
41732Type1 -2 3 5
41732Type2 -10 -8 2
推荐阅读
- redirect - 显示从旧域重定向到新域的弹出窗口
- sql-server - SQL Server 插入语句部分插入数据。并非所有给定数据都被插入
- javascript - Why is this decoding/encoding process giving a different buffer array?
- websocket - 你能提供关于websocket的信息吗
- java - Caused by: org.h2.jdbc.JdbcSQLDataException: Hexadecimal string contains non-hex character
- c# - How to output all class objects in console?
- php - 正则表达式仅匹配全套两部分模式(有点非贪婪)
- python - Python Dataframe 中的多个 If 语句
- node.js - 如何使用 Node.js 在 Express.js 中为同一查询返回不同的结果?
- react-native - (0, _reactI18next.translate) 不是函数