Pandas 按存储在不同列中的组合队列排序

Pandas 按存储在不同列中的组合队列排序,pandas,combinatorics,Pandas,Combinatorics,假设我有一个数据框,其中3列包含参数。因此,所有可能的队列都是组合:假设列有“duck”、“cat”、“dog”,另一列有“white”、“grey”、“black”,最后一列有“small”、“big”。因此,同伙有小灰鸭、大黑猫等 因此,如何通过存储在其中的所有可能队列对数据帧进行分组?我需要这个来计算所有队列的特定值。谢谢。无论如何,你必须将你的系列分成独特的元素(无论是列表还是熊猫系列) 例如: cols1 = set(df['col1']) cols2 = set(df['col2']

假设我有一个数据框,其中3列包含参数。因此,所有可能的队列都是组合:假设列有“duck”、“cat”、“dog”,另一列有“white”、“grey”、“black”,最后一列有“small”、“big”。因此,同伙有小灰鸭、大黑猫等


因此,如何通过存储在其中的所有可能队列对数据帧进行分组?我需要这个来计算所有队列的特定值。谢谢。

无论如何,你必须将你的系列分成独特的元素(无论是列表还是熊猫系列)

例如:

cols1 = set(df['col1'])
cols2 = set(df['col2'])
cols3 = set(df['col3'])
df = pd.DataFrame([[x,y,z] for x in cols1 for y in cols2 for z in cols3], columns=['col1', 'col2', 'col3'])
df.drop_duplicates(keep="first", inplace=True)
您还可以使用循环(在df.columns.tolist()上循环)并将序列值存储到dict中

(这有助于收集所有可能的队列组合)

编辑:

要对第一个数据帧中的组合进行分组,可以执行以下操作:

df.groupby(['col1','col2','col3'])['col4'].mean()

见医生

编辑2:

获取所有组合的另一种方法是(仅使用熊猫):


有关reduce/lambda解决方案,请致电@everestal007

谢谢。因此,我应该给自己循环一个新的数据帧,其中包含来自列的唯一值。但是我是否能够找出所有的群组组合,因为我需要知道所有3列中所有可能的值组合?我的团队需要是复合的;b、 )我是否能够计算新数据框中的任何内容,我将需要计算原始数据框中的数据。此答案尚未包含OP要求的分组。@有效:在没有任何示例的情况下,无法计算关于此分组操作的问题。。。但你是right@Versteher:刚编辑过,但我开始怀疑我一开始不理解你的问题。。。如果groupby是您要寻找的答案,请告诉我,我将删除此帖子。@当您说“所有可能的组合/群组”时,您是指“理论范围/功率集”还是指“在实际数据帧中可以观察到的所有组合”?
dataframe
具有
groupby()
。是
数据帧.groupby(列列表)。(…)
,e。g
data\u frame.groupby([“动物”、“颜色”、“大小”).max(“年龄”)
,不做您需要的事情吗?
from functools import reduce
cols = [df[[col]].drop_duplicates(keep='first') for col in ['col1', 'col2', 'col3']]
for sub_df_col in cols:
  sub_df_col['CARTESIAN_PRODUCT'] = 1 #you now have a new column which the same value everywhere
df2 = reduce(lambda  left,right: pd.merge(left,right,on=['CARTESIAN_PRODUCT'], how='outer'), cols).drop('CARTESIAN_PRODUCT', axis=1)