一列内唯一对的数量-熊猫

时间:2018-11-05 17:17:45

标签: python pandas pandas-groupby

在为我的熊猫数据框生成统计信息时,我遇到了一些问题。我的数据框如下所示(我省略了索引):

for i in *; do mv "$i/title" "$i/$i%%.mkv" ; done

重要的是,每个URL url = new URL("https://google.com:443/search"); System.out.println(url.getProtocol()); // https System.out.println(url.getHost()); // google.com System.out.println(url.getPort()); // 443 都分配了两个id type 1 A 2 B 3 A 1 B 3 B 2 C 4 B 4 C 值,如上例所示。我想计算所有id个组合的出现次数(因此,用给定的type组合来计算唯一type组合的数目),所以我想得到这样一个数据框:

id

我尝试了多种方式使用type,但徒劳无功。我可以使用type count A, B 2 A, C 0 B, C 2 和许多代码行来进行这种“计数”,但是我认为必须有一个优雅且适当的解决方案(以python术语)。

预先感谢您的提示。

4 个答案:

答案 0 :(得分:5)

pd.value_countsitertools.combinations

from itertools import combinations

pd.value_counts(
    [(x, y) for _, d in df.groupby('id') for x, y in combinations(d.type, 2)]
)

(A, B)    2
(B, C)    2
dtype: int64

答案 1 :(得分:4)

使用Countergroupby和默认构造函数

from collections import Counter
>>> pd.DataFrame(Counter([tuple(v.type.values) for _,v in df.groupby('id')]), index=['Count']).T

        Count
A   B   2
B   C   2

答案 2 :(得分:3)

GroupBy + applyvalue_counts一起使用:

from itertools import combinations

def combs(types):
    return pd.Series(list(combinations(sorted(types), 2)))

res = df.groupby('id')['type'].apply(combs).value_counts()

print(res)

(A, B)    2
(B, C)    2
Name: type, dtype: int64

答案 3 :(得分:3)

也许使用unique,请注意仅对一个ID内的两个唯一值有用

df.groupby('id').type.unique().apply(tuple).value_counts()
Out[202]: 
(A, B)    2
(B, C)    2
Name: type, dtype: int64