python - 来自带有分类数据和自定义“箱”的熊猫数据框列的直方图/值计数
问题描述
考虑以下数据框:
import pandas as pd
x = pd.DataFrame([[ 'a', 'b'], ['a', 'c'], ['c', 'b'], ['d', 'c']])
print(x)
0 1
0 a b
1 a c
2 c b
3 d c
我想根据一些自定义“箱”获得数据帧每一列中数据的相对频率,这些“箱”将是唯一数据值的(可能的超集)。例如,如果:
b = ['a', 'b', 'c', 'd', 'e', 'f']
我想获得:
0 1
a 2 0
b 0 2
c 1 2
d 1 0
e 0 0
f 0 0
是否有一个(或两个)班轮来实现这一目标?
解决方案
尝试,然后基于 b:apply
value_counts
reindex
import pandas as pd
x = pd.DataFrame([['a', 'b'], ['a', 'c'], ['c', 'b'], ['d', 'c']])
b = ['a', 'b', 'c', 'd', 'e', 'f']
df = x.apply(lambda s: s.value_counts()).reindex(b).fillna(0).astype(int)
print(df)
df
:
0 1
a 2 0
b 0 2
c 1 2
d 1 0
e 0 0
f 0 0
import pandas as pd
x = pd.DataFrame([['a', 'b'], ['a', 'c'], ['c', 'b'], ['d', 'c']])
b = ['a', 'b', 'c', 'd', 'e', 'f']
df = x.melt()
df = pd.crosstab(df['value'], df['variable']) \
.reindex(b).fillna(0).astype(int) \
.rename_axis(None, axis=1).rename_axis(None, axis=0)
print(df)
df
:
0 1
a 2 0
b 0 2
c 1 2
d 1 0
e 0 0
f 0 0
推荐阅读
- java - 在 Jenkins 中使用自定义工作区并运行基于 TestNG 的 Selenium 测试的 shell 脚本时出现 java.nio.file.AccessDeniedException 错误
- javascript - 我想将数组转换为对象
- java - 应用程序会拍照,但不会保存
- ios - How to do transform CALayer without changing it's shape
- html - I'm getting stuck at vba runtime error 424
- python - 来自文本文件的 Python 代码 Mysql 连接字符串
- c# - 使用 SQL 查询合并三个表并获得一个输出
- wildcard - 如何处理狂野同情的结果
- android - How to send image in android
- azure - Implement row level security (RLS) in Azure Data Explorer