gpt4 book ai didi

python - Pandas 数据框 : how to permute rows and create new groups of combinations

转载 作者:行者123 更新时间:2023-12-04 03:34:08 29 4
gpt4 key购买 nike

我有以下具有 10 行和 4 列属性 3 个分类变量的 pandas 数据框 df:

df = pd.DataFrame(np.random.choice(["dog", "cat", "mice"], size=(10, 4)))

我想知道行之间可能的所有排列,并创建一个包含行组合的不同分组的新数据框,例如一个组在同一行中包含两次相同的变量作为猫猫狗老鼠或 4 只相同的 pig pig pig pig 等。我尝试使用 Itertools 但没有成功。有人可以帮助一些适应症吗?谢谢

最佳答案

希望我已经正确理解您的问题。此示例将创建系列,其中索引是组合,值是此组合的大小:

from collections import Counter
from itertools import permutations

print(
df.assign(
items=df.apply(
lambda x: [
frozenset(Counter(p).items()) for p in permutations(x, len(x))
],
axis=1,
)
)
.explode("items")
.groupby("items")
.size()
)

打印(例如):

items
((mice, 2), (dog, 2)) 48
((cat, 1), (dog, 2), (mice, 1)) 48
((cat, 3), (mice, 1)) 24
((mice, 3), (cat, 1)) 24
((dog, 1), (mice, 3)) 48
((dog, 1), (cat, 2), (mice, 1)) 24
((mice, 4)) 24
dtype: int64

编辑:获取数据框:

x = (
df.assign(
items=df.apply(
lambda x: [
frozenset(Counter(p).items()) for p in permutations(x, len(x))
],
axis=1,
)
)
.explode("items")
.groupby("items")
.size()
)
df_out = (
pd.DataFrame([dict(i, count=v) for i, v in zip(x.index, x)])
.fillna(0)
.astype(int)
)
print(df_out)

打印:

   dog  mice  cat  count
0 1 1 2 24
1 2 2 0 72
2 2 1 1 24
3 0 2 2 48
4 4 0 0 24
5 0 3 1 24
6 1 3 0 24

关于python - Pandas 数据框 : how to permute rows and create new groups of combinations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67263575/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com