按存储在不同列中的复合队列进行排序



假设我有一个数据帧,其中3列包含参数。因此,所有可能的队列都是组合:假设列具有";鸭子"cat"狗";,另一个";白色"灰色"黑色";,最后一个";"小"大";。因此,队列是小灰鸭,大黑猫,等等

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

不知怎么的,你必须把你的系列分成独特的元素(无论是列表还是pandas.series(。

例如:

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(['cl1','col2','coll3'](['cl4'].mmean((

参见pandas.groupby的文档

编辑2:

获得所有组合的另一种方法可能是(仅使用熊猫(:

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)

reduce/lambda溶液归功于@everestial007

最新更新