来自 pandas 的 groupby 是可交换的吗?
Is groupby from pandas commutative?
我想知道是否选择了以下行:
groupby(['a', 'b'])
与以下选择的行相同:
groupby(['b', 'a'])
在这种情况下,行的顺序无关紧要。
有没有groupby
不满足交换律属性的情况?
是的,最后的分组总是一样的。
唯一不同的是行的显示顺序。
我认为计数的顺序无关紧要,只有在 groupby 获得第一列/级别之后才能像列表中有列一样。
df = pd.DataFrame({
'a':list('aaaaaa'),
'b':[4,5,4,5,5,4],
'c':[7,8,9,4,2,3],
})
groupby
聚合后的级别顺序:
df1 = df.groupby(['a', 'b']).sum()
print (df1)
c
a b
a 4 19
5 14
df2 = df.groupby(['b', 'a']).sum()
print (df2)
c
b a
4 a 19
5 a 14
和列:
df3 = df.groupby(['a', 'b'], as_index=False).sum()
print (df3)
a b c
0 a 4 19
1 a 5 14
df4 = df.groupby(['b', 'a'], as_index=False).sum()
print (df4)
b a c
0 4 a 19
1 5 a 14
如果对具有与原始结果相同大小的新列使用转换是相同的:
df['new1'] = df.groupby(['a', 'b'])['c'].transform('sum')
df['new2'] = df.groupby(['b', 'a'])['c'].transform('sum')
print (df)
a b c new1 new2
0 a 4 7 19 19
1 a 5 8 14 14
2 a 4 9 19 19
3 a 5 4 14 14
4 a 5 2 14 14
5 a 4 3 19 19
根据 definition 和在 pandas
中使用 groupby
时应用的逻辑,它将始终是可交换的:
A groupby operation involves some combination of splitting the object, applying a function, and combining the results.
这个组合是线性的,因此是可交换的。重要的是,当传递多个 by
值时,在处理它们时应牢记新索引值中的顺序。
来自维基百科的 linear combination and commutative property:
In mathematics, a linear combination is an expression constructed from a set of terms by multiplying each term by a constant and adding the results.
The idea that simple operations, such as the multiplication and addition of numbers, are commutative was for many years implicitly assumed.
我想知道是否选择了以下行:
groupby(['a', 'b'])
与以下选择的行相同:
groupby(['b', 'a'])
在这种情况下,行的顺序无关紧要。
有没有groupby
不满足交换律属性的情况?
是的,最后的分组总是一样的。
唯一不同的是行的显示顺序。
我认为计数的顺序无关紧要,只有在 groupby 获得第一列/级别之后才能像列表中有列一样。
df = pd.DataFrame({
'a':list('aaaaaa'),
'b':[4,5,4,5,5,4],
'c':[7,8,9,4,2,3],
})
groupby
聚合后的级别顺序:
df1 = df.groupby(['a', 'b']).sum()
print (df1)
c
a b
a 4 19
5 14
df2 = df.groupby(['b', 'a']).sum()
print (df2)
c
b a
4 a 19
5 a 14
和列:
df3 = df.groupby(['a', 'b'], as_index=False).sum()
print (df3)
a b c
0 a 4 19
1 a 5 14
df4 = df.groupby(['b', 'a'], as_index=False).sum()
print (df4)
b a c
0 4 a 19
1 5 a 14
如果对具有与原始结果相同大小的新列使用转换是相同的:
df['new1'] = df.groupby(['a', 'b'])['c'].transform('sum')
df['new2'] = df.groupby(['b', 'a'])['c'].transform('sum')
print (df)
a b c new1 new2
0 a 4 7 19 19
1 a 5 8 14 14
2 a 4 9 19 19
3 a 5 4 14 14
4 a 5 2 14 14
5 a 4 3 19 19
根据 definition 和在 pandas
中使用 groupby
时应用的逻辑,它将始终是可交换的:
A groupby operation involves some combination of splitting the object, applying a function, and combining the results.
这个组合是线性的,因此是可交换的。重要的是,当传递多个 by
值时,在处理它们时应牢记新索引值中的顺序。
来自维基百科的 linear combination and commutative property:
In mathematics, a linear combination is an expression constructed from a set of terms by multiplying each term by a constant and adding the results. The idea that simple operations, such as the multiplication and addition of numbers, are commutative was for many years implicitly assumed.