python - 如何在某些类别常见的熊猫中合并交叉表的类别?
问题描述
但这并不包括两个合并类别可能具有共同类别的情况
在那种情况下,我想将类别 A 和 B 合并到 AB 中。如果我有类别 A、B、C 并且我想将 A、B 合并到 AB 并将 B、C 合并到 BC 怎么办?
假设我有数据:
+---+---+
| X | Y |
+---+---+
| A | D |
| B | D |
| B | E |
| B | D |
| A | E |
| C | D |
| C | E |
| B | E |
+---+---+
我希望交叉表看起来像:
+--------+---+---+
| X/Y | D | E |
+--------+---+---+
| A or B | 3 | 3 |
| B or C | 3 | 2 |
| C | 1 | 1 |
+--------+---+---+
解决方案
我认为您可以使用crosstab
所有唯一值,然后通过按索引值中的类别选择来求和值:
df = pd.crosstab(df.X, df.Y)
df.loc['A or B'] = df.loc[['A','B']].sum()
df.loc['B or C'] = df.loc[['C','B']].sum()
df = df.drop(['A','B'])
print (df)
Y D E
X
C 1 1
A or B 3 3
B or C 3 3
编辑:如果想要通用解决方案并不容易,因为有必要重复组,rename
例如:
df1 = df[df['X'] == 'B'].assign(X = 'B or C')
df2 = df[df['X'] == 'C']
df = pd.concat([df, df1], ignore_index=True)
df['X'] = df['X'].replace({'A':'A or B', 'B': 'A or B', 'C': 'B or C'})
df = pd.concat([df, df2], ignore_index=True)
df = pd.crosstab(df.X, df.Y)
print (df)
Y D E
X
A or B 3 3
B or C 3 3
C 1 1
推荐阅读
- aws-sdk - AWS 节点 JS MFA Cognito
- c - 在封装的内联函数中返回
- batch-file - 如何给命令行输入?
- javascript - 如何使用 rel="preload" as="style" 或 as="script" 或更好的页面速度方法
- apache-kafka - 为什么我在检索存储以查询它时偶尔会收到 InvalidStateStoreException PARTITIONS_REVOKED,而不是 RUNNING?
- vue.js - Vue.js - 方法与计算。这里有什么问题
- google-apps-script - 文件夹的 Google Drive API 自定义角色
- javascript - 反应 this.props.title 为空!!为什么?
- android - android.view.InflateException: Binary XML file line #18: Binary XML file line #18: Error inflating class Button
- typescript - 什么是快速而肮脏的扩展/分配?