您如何根据布尔值排列对 pandas 数据帧行进行分组?
How do you group pandas dataframe rows based on permutation of booleans?
假设有一个 pandas 数据框,其中包含五列和 n 行。每列都有一个布尔值。
数学上说布尔值应该有 32 种排列。
如何通过与每一行相关联的布尔值的排列对它们进行分组,以便我可以获得每个组或 return 其他属性的计数?
例如,我如何找出与 TTTTT 或 TTTTF 或我感兴趣的任何排列关联的行数?
有几种方法可以做到这一点。一种方法是同时按您关心的所有列进行分组。如果需要计数,可以对结果调用 GroupBy.count
方法:
df.groupby(['c1', 'c2', 'c3', 'c4', 'c5']).count()
或者更简单地说,如果所有列都感兴趣:
df.groupby(list(df.columns)).count()
您还可以将布尔值转换为数字,并对其进行分组:
df['Num'] = (df.to_numpy() << [4, 3, 2, 1, 0]).sum(0)
df.groupby('Num').count()
不需要创建新列的更通用的解决方案可以使用 value_counts
names = ['c1', 'c2', 'c3', 'c4', 'c5']
pd.Series((df[names].to_numpy() << np.arange(len(names))).sum(0)).value_counts()
你可以很方便地重写为
pd.Series.value_counts((df[names].to_numpy() << np.arange(len(names))).sum(0))
假设有一个 pandas 数据框,其中包含五列和 n 行。每列都有一个布尔值。
数学上说布尔值应该有 32 种排列。
如何通过与每一行相关联的布尔值的排列对它们进行分组,以便我可以获得每个组或 return 其他属性的计数?
例如,我如何找出与 TTTTT 或 TTTTF 或我感兴趣的任何排列关联的行数?
有几种方法可以做到这一点。一种方法是同时按您关心的所有列进行分组。如果需要计数,可以对结果调用 GroupBy.count
方法:
df.groupby(['c1', 'c2', 'c3', 'c4', 'c5']).count()
或者更简单地说,如果所有列都感兴趣:
df.groupby(list(df.columns)).count()
您还可以将布尔值转换为数字,并对其进行分组:
df['Num'] = (df.to_numpy() << [4, 3, 2, 1, 0]).sum(0)
df.groupby('Num').count()
不需要创建新列的更通用的解决方案可以使用 value_counts
names = ['c1', 'c2', 'c3', 'c4', 'c5']
pd.Series((df[names].to_numpy() << np.arange(len(names))).sum(0)).value_counts()
你可以很方便地重写为
pd.Series.value_counts((df[names].to_numpy() << np.arange(len(names))).sum(0))