如何在 Python 中划分多级列
How to divide multilevel columns in Python
我有一个这样的 df:
arrays = [['bar', 'bar', 'baz', 'baz'],
['one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 4), index=['A', 'B', 'C'], columns=index)
df.head()
返回:
我想添加一些列,其中所有第二级维度都相互划分 - 第一栏除以 baz 一,第二栏除以 baz 二,等等。
df[["bar"]]/df[["baz"]]
和
df[["bar"]].div(df[["baz"]])
returns NaN 的
你可以 select 两个级别只差一个 []
:
df1 = df["bar"]/df["baz"]
print (df1)
second one two
A 1.564478 -0.115979
B 14.604267 -19.749265
C -0.511788 -0.436637
如果要添加 MultiIndex
添加 MultiIndex.from_product
:
df1.columns = pd.MultiIndex.from_product([['new'], df1.columns], names=df.columns.names)
print (df1)
first new
second one two
A 1.564478 -0.115979
B 14.604267 -19.749265
C -0.511788 -0.436637
输出中 MultiIndex
的另一个想法是将您的解决方案与具有相同名称的 rename
列一起使用,此处 new
:
df2 = df[["bar"]].rename(columns={'bar':'new'})/df[["baz"]].rename(columns={'baz':'new'})
print (df2)
first new
second one two
A 1.564478 -0.115979
B 14.604267 -19.749265
C -0.511788 -0.436637
我有一个这样的 df:
arrays = [['bar', 'bar', 'baz', 'baz'],
['one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 4), index=['A', 'B', 'C'], columns=index)
df.head()
返回:
我想添加一些列,其中所有第二级维度都相互划分 - 第一栏除以 baz 一,第二栏除以 baz 二,等等。
df[["bar"]]/df[["baz"]]
和
df[["bar"]].div(df[["baz"]])
returns NaN 的
你可以 select 两个级别只差一个 []
:
df1 = df["bar"]/df["baz"]
print (df1)
second one two
A 1.564478 -0.115979
B 14.604267 -19.749265
C -0.511788 -0.436637
如果要添加 MultiIndex
添加 MultiIndex.from_product
:
df1.columns = pd.MultiIndex.from_product([['new'], df1.columns], names=df.columns.names)
print (df1)
first new
second one two
A 1.564478 -0.115979
B 14.604267 -19.749265
C -0.511788 -0.436637
输出中 MultiIndex
的另一个想法是将您的解决方案与具有相同名称的 rename
列一起使用,此处 new
:
df2 = df[["bar"]].rename(columns={'bar':'new'})/df[["baz"]].rename(columns={'baz':'new'})
print (df2)
first new
second one two
A 1.564478 -0.115979
B 14.604267 -19.749265
C -0.511788 -0.436637