我已经看到了
level
方法 pd.DataFrame
、add
、sub
和 div
的 mul
参数。 文档指出:
级别:整数或名称
跨级别广播,匹配传递的多索引级别上的索引值
我似乎无法理解如何正确使用它。
考虑:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(8).reshape(4, 2),
pd.MultiIndex.from_product([['A', 'B'], ['one', 'two']]),
list('ab'))
df
a b
A one 0 1
two 2 3
B one 4 5
two 6 7
如果我加 100,我就会得到我所期望的结果。
level
参数没有相关性。
pd.concat([df, df.add(100), df.add(100, level=0), df.add(100, level=1)],
axis=1, keys=['Original', 'No Level', 'Level 0', 'Level 1'])
Original No Level Level 0 Level 1
a b a b a b a b
A one 0 1 100 101 100 101 100 101
two 2 3 102 103 102 103 102 103
B one 4 5 104 105 104 105 104 105
two 6 7 106 107 106 107 106 107
但我认为添加数组会很独特。
a = np.arange(2) + 100
pd.concat([df, df.add(a), df.add(a, level=0), df.add(a, level=1)],
axis=1, keys=['Original', 'No Level', 'Level 0', 'Level 1'])
Original No Level Level 0 Level 1
a b a b a b a b
A one 0 1 100 102 100 102 100 102
two 2 3 102 104 102 104 102 104
B one 4 5 104 106 104 106 104 106
two 6 7 106 108 106 108 106 108
level
没有区别。
我期待类似的事情:
df.groupby(level=0).apply(lambda df: df.add(a, axis=0))
a b
A one 100 101
two 103 104
B one 104 105
two 107 108
有人可以给出如何以及何时使用此参数的具体示例吗?
示例已添加到文档:
示例
>>> df = pd.DataFrame({'angles': [0, 3, 4], ... 'degrees': [360, 180, 360]}, ... index=['circle', 'triangle', 'rectangle']) >>> df angles degrees circle 0 360 triangle 3 180 rectangle 4 360
[...]
按级别除以 MultiIndex。
>>> df_multindex = pd.DataFrame({'angles': [0, 3, 4, 4, 5, 6], ... 'degrees': [360, 180, 360, 360, 540, 720]}, ... index=[['A', 'A', 'A', 'B', 'B', 'B'], ... ['circle', 'triangle', 'rectangle', ... 'square', 'pentagon', 'hexagon']]) >>> df_multindex angles degrees A circle 0 360 triangle 3 180 rectangle 4 360 B square 4 360 pentagon 5 540 hexagon 6 720
>>> df.div(df_multindex, level=1, fill_value=0) angles degrees A circle NaN 1.0 triangle 1.0 1.0 rectangle 1.0 1.0 B square 0.0 0.0 pentagon 0.0 0.0 hexagon 0.0 0.0
与没有
level
的结果进行比较:
>>> df.div(df_multindex, fill_value=0)
...
ValueError: cannot join with no overlapping index names
还有一个索引名称重叠的版本:
>>> df.rename_axis('shape').div(
... df_multindex.rename_axis(['group', 'shape']),
... fill_value=0)
angles degrees
group shape
A circle NaN 1.0
triangle 1.0 1.0
rectangle 1.0 1.0
B square 0.0 0.0
pentagon 0.0 0.0
hexagon 0.0 0.0