python - Pandas中变量相互出现的表
问题描述
我有一个不同类别变量的数据框,如下所示:
df:
A B C D
0 a b c d
1 b d a e
2 d a e c
每行都有一个来自 ae 的变量,并且它们从不每列重复。我想知道并创建一个每个值在一行中出现的表。所需的数据框如下所示:
df2:
x a b c d e
0 a NaN 2 2 3 2
1 b 2 NaN 1 2 1
2 c 2 1 NaN 2 1
3 d 3 2 2 NaN 1
4 e 2 1 1 1 NaN
我已经有了df2['x']
,所以我已经有一列变量。
我能够通过以下方式计算出现次数并将它们映射到相应的变量:
for x in df['x']:
df2[str(x)] = df2['x'].map(df.melt()['value'].value_counts())
x a b c d e
0 a 3 2 2 3 2
1 b 2 2 1 2 1
2 c 2 1 2 2 1
3 d 3 2 2 3 1
4 e 2 1 1 1 2
正如你所看到的,当它与自身进行制表时,我得到的是变量的总数,而不是 NaN。我希望从使用的功能中得到这一点。
有没有办法将这些值更改为 NaN?我最终想在可视化期间将它们更改为 0 或其他值,但是将它们作为 NaN 更简单,因为它们更容易找到(值是唯一且相同的)。
另外,当我迭代 df2['x'] 中的每个项目时,是否有一种更简单的方法来做我想做的事情?
解决方案
我们可以尝试 astack
后跟merge
and crosstab
:
s = df.stack().reset_index(name='val')
s = s.merge(s, on='level_0').query('val_x!=val_y')
pd.crosstab(s.val_x, s.val_y)
输出:
val_y a b c d e
val_x
a 0 2 2 3 2
b 2 0 1 2 1
c 2 1 0 2 1
d 3 2 2 0 2
e 2 1 1 2 0
推荐阅读
- c - 带有 PTRACE_O_EXITKILL 的 PTRACE_SETOPTIONS 不起作用:参数无效
- scala - Scala var 最佳实践 - 封装
- java - 使用 Today 按钮更新 Android DatePickerDialog 中的日期而不关闭对话框
- c - 将字符串添加到链表会导致段错误
- java - Places API 未运行 OnSuccessListener
- javascript - 这里的数组输出类型是什么
- react-native - useState 钩子在 React Native 的 TextInput 中的 onKeyPress 处理程序中不起作用
- google-cloud-platform - 无法从 GCR 导出容器镜像漏洞?
- java - 查找列表中的哪些项目在领域中不存在
- ssl - 在 Ubuntu 上使用 SSL 的格式错误的请求行