Python Pandas dataframe:如何排列行和创建新的组合组
我有以下数据帧df,其中有10行4列,属性为3个分类变量:Python Pandas dataframe:如何排列行和创建新的组合组,python,pandas,pandas-groupby,itertools,Python,Pandas,Pandas Groupby,Itertools,我有以下数据帧df,其中有10行4列,属性为3个分类变量: df=pd.DataFrame(np.random.choice([“狗”、“猫”、“老鼠”],大小=(10,4))) 我想知道行之间所有可能的排列,并创建一个包含不同行组合分组的新数据帧,例如,一个组在同一行中包含两倍于猫-猫-狗-老鼠或4倍于同一只猪的相同变量等。我尝试使用Itertools,但没有成功。有人帮你做一些指示吗?谢谢我希望我正确理解了你的问题。此示例将创建一个系列,其中索引是组合,值是此组合的大小: from col
df=pd.DataFrame(np.random.choice([“狗”、“猫”、“老鼠”],大小=(10,4)))
我想知道行之间所有可能的排列,并创建一个包含不同行组合分组的新数据帧,例如,一个组在同一行中包含两倍于猫-猫-狗-老鼠或4倍于同一只猪的相同变量等。我尝试使用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()
)
打印(例如):
项目
(老鼠2只狗2只)48
(猫,1)、(狗,2)、(老鼠,1))48
(猫,3只,(老鼠,1只))24
(小鼠,3只,(猫,1只))24
((狗,1),(老鼠,3))48
(狗,1)、(猫,2)、(老鼠,1))24
((小鼠,4))24
数据类型: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)
印刷品:
狗鼠猫数
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
如果您有一个预期的输出,回答起来会更容易。输出将是一个包含多行和两列的表:第一列将包含不同的组,这些组可以包含相同的行、对或唯一的组合,第二列将包含看到的组的计数(频率)太好了,我想是这样!谢谢你,安德烈!!你知道我如何从输出中创建一个新的df,以便绘制一些项目组合吗?@JessBR请查看我的编辑。非常感谢!非常感谢你的帮助!!是否可以从初始df计算唯一组合的数量?