- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个这样的数据框:
import pandas as pd
data = {'group': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c'],
'item': ['Apple', 'Chocolate', 'Beans', 'Apple', 'Beans', 'Banana', 'Banana', 'Chocolate', 'Banana', 'Orange', 'Apple', 'Apple' ]
}
df = pd.DataFrame(data, columns = ['group','item'])
df
0 a Apple
1 a Chocolate
2 a Beans
3 a Apple
4 b Beans
5 b Banana
6 b Banana
7 c Chocolate
8 c Banana
9 c Orange
10 c Apple
11 c Apple
如何计算组内成对出现的总数?
我想得到一个表格,其中包含组中出现的每个项目组合并获取它们的频率。如果一组下有两个相同的项目,我想保留项目与自身的组合,但只有在与其他项目匹配时才算作一个。
理想情况下,我希望获得一个在轴、行和列上都包含项目名称的数据框,并且矩阵的一半具有相应的值。
在一列中包含组合而在另一列中包含值的数据框也可以完美地完成。
上面的例子会变成这样:
apple - chocolate 2
apple - apple 2
apple - beans 1
apple - Orange 1
apple - Banana 1
chocolate - Beans 1
beans - banana 1
banana - banana 1
chocolate - banana 1
chocolate - orange 1
banana - orange 1
所以我想我会先使用没有重复的组合和计数器,然后再添加匹配自己的项目。原因是为了避免为同一组下的多个项目组合计算多个匹配项。但是,当我尝试这样做时,某些组合会以不同的顺序出现两次,例如苹果 - 巧克力和巧克力 - 苹果。这是我的代码:
from collections import Counter
from itertools import combinations
df = df.groupby('group').filter(lambda g: len(g) > 1).drop_duplicates(subset=['group', 'item'], keep="first")
result = df.groupby(['group']).agg(lambda g: list(set(combinations(g, 2))))
combos = pd.DataFrame(Counter(result.item.sum()).items(), columns=['combos', 'count'])
combos
combos count
0 (Apple, Beans) 1
1 (Apple, Chocolate) 1
2 (Chocolate, Beans) 1
3 (Beans, Banana) 1
4 (Chocolate, Orange) 1
5 (Orange, Apple) 1
6 (Banana, Orange) 1
7 (Banana, Apple) 1
8 (Chocolate, Banana) 1
9 (Chocolate, Apple) 1
请帮帮我!
最佳答案
对您的代码稍作调整即可解决您的问题
## No need to drop to duplicates as you create a set of the combinations, so they won't be counted twice
# df = df.groupby('group').filter(lambda g: len(g) > 1).drop_duplicates(subset=['group', 'item'], keep="first")
## Sorted g, so the problem with tuples that are ordered differently is solved
result = df.groupby(['group']).agg(lambda g: list(set(combinations(sorted(g), 2))))
combos = pd.DataFrame(Counter(result.item.sum()).items(), columns=['combos', 'count'])
combos
combos count
0 (Apple, Beans) 1
1 (Beans, Chocolate) 1
2 (Apple, Apple) 2
3 (Apple, Chocolate) 2
4 (Banana, Banana) 1
5 (Banana, Beans) 1
6 (Apple, Banana) 1
7 (Banana, Orange) 1
8 (Apple, Orange) 1
9 (Chocolate, Orange) 1
10 (Banana, Chocolate) 1
用##
标记我的更改
你当然可以很容易地使用
combos.sort_values('count', ascending=False)
关于python - 如何计算 Pandas 数据框中子组内项目的成对出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65643468/
我有 X 个值通过 CSV 传递到表中 - 因此我将 99315,99316,99223 并将它们拆分到单列临时表中 - CSV 中的每个值都放入一行。 我需要做的是获得成对的值的每个排列 -所以 -
我已经看到了几个关于如何生成数组中元素的所有可能组合的类似问题。但是我很难弄清楚如何编写一个只输出对组合的算法。任何建议将不胜感激! 从以下数组开始(有 N 个元素): var array = ["a
基本上我想做这样的查询: SELECT * FROM `table` WHERE (`c1`,`c2`) in (('a','b'),('c','d')) 我尝试了一些方法,但找不到任何关于如何实现的
我声明了一个 vector 对: vector > args; 然后我想像这样将一对插入 vector : args.push_back((1,-1)); 它告诉我逗号的左边操作数没有作用。我哪里出
我正在用给定的对填充 vector 的邻接列表: vector> adj[1000]; 我正在对列表进行深度优先搜索,但遇到了一些奇怪的行为。第一个 print 语句打印一些值,这意味着我在 adj[
这个问题Mysql Select some random rows and plus one specific row非常接近我想要的,只是我不知道如何将 ORDER BY 应用于我的情况。 当有人接
我在字符串向量中有大量文本(大约 700.000 个字符串)。我正在尝试替换语料库中的特定单词/短语。也就是说,我有一个包含 app 40.000 个短语的向量和一个相应的替换向量。 我正在寻找解决问
我正在寻找一种方法来找到第 2 组(对)的集群。 有没有一种简单的方法可以做到这一点? 想象一下,我有某种数据想要匹配 x和 y , 喜欢 library(cluster) set.seed(1) d
我必须正确编码 5 个 XML 保留字符(& "和 '),如下所示: "&", "&" "", ">" "\"", """ "\'", "'" 我可以一一做,
我正在处理我的作品集。我在正文中有图像我希望图像应该只使用 css/css3/Jquery 对 Angular 线而不是通过 photoshop 编辑我已经尝试对正文使用变换旋转。 但我没有得到结果。
我带着类似的问题又回来了。是否有可以返回其特定合作伙伴的数据类型?例如: ExampleType test = new ExampleType(); test.put("hello","hi"); 如
我正在对我的数据运行事后 Tukey HSD,该数据有 10 个因子级别。该表很大,我希望在成对的表中向读者展示 p 值,将 45 行表留给附录。 这是一个示例数据集: set.seed(42) x
我正在对我的数据运行事后 Tukey HSD,该数据有 10 个因子级别。该表很大,我希望在成对的表中向读者展示 p 值,将 45 行表留给附录。 这是一个示例数据集: set.seed(42) x
我想根据 std::pair 的 std::vector 找到 std::lower_bound second 元素与 lambda。 std::vector > vec; vec.resize(5
得到这个简单的python代码,和re.compile实例一样匹配。我注意到,即使我使用的是完全相同的值,它也会创建两个实例,并相应地重复它们。 我想知道是否有人可以说出这种行为的原因, 为什么要创建
首先,我是 C++ 的新手,所以我可能不得不深入研究伪代码和/或 Python 来解释我正在尝试做的事情... 我正在尝试为动画的每一帧存储多个 Sprite 的 X 和 Y 坐标对。我设想这类似于以
test1和test2在内存中的布局是否相同? std::vector > test1; std::vector test2; 其中 mystruct 定义为: struct mystru
我有这个代码: std::vector> vec; vec.emplace_back("a", 1); //success vec.emplace(vec.end(), "b", 2); //comp
跟进 this question ,我正在尝试制作箱线图和成对比较以再次显示显着性水平(仅针对重要的成对),但这次我有超过 2 个组要比较和更复杂的方面。 我将在此处使用 iris 数据集进行说明。检
我有一个 vector 对,如下所示。第一对值未排序,第二对值已排序(从零开始)。我可能想通过实现 std::vector 和 std::pair 来存储数据。当我有第一对值(未排序)时,找到相应的第
我是一名优秀的程序员,十分优秀!