英文:
Python Perform Custom Calculations on 0 level columns
问题
import pandas as pd
df = pd.DataFrame({
('A', 'a'): [1, 2, 3],
('A', 'b'): [4, 5, 6],
('B', 'a'): [7, 8, 9],
('B', 'b'): [10, 11, 12],
})
df
我想在每个Zero Level的每一列上执行一个定义好的计算,并输出另一个Zero Level标签 "C"。
我想执行 "A" * "B" / 2
得到一个数据帧的输出:
df = pd.DataFrame({
('A', 'a'): [1, 2, 3],
('A', 'b'): [4, 5, 6],
('B', 'a'): [7, 8, 9],
('B', 'b'): [10, 11, 12],
('C', 'a'): [3.5, 8, 13.5],
('C', 'b'): [20, 27.5, 36],
})
df
我的初始思路是在 level=0, axis=1 上进行 .groupby,然后使用 .apply() 函数。谢谢。
英文:
I have a Data Frame:
import pandas as pd
df = pd.DataFrame({
('A', 'a'): [1, 2, 3],
('A', 'b'): [4, 5, 6],
('B', 'a'): [7, 8, 9],
('B', 'b'): [10, 11, 12],
})
df
I would like to perform a defined calculation on each of the columns in each Zero Level and output another Zero Level label "C".
I would like to do "A" * "B" / 2
resulting in a Data Frame output:
df = pd.DataFrame({
('A', 'a'): [1, 2, 3],
('A', 'b'): [4, 5, 6],
('B', 'a'): [7, 8, 9],
('B', 'b'): [10, 11, 12],
('C', 'a'): [3.5, 8, 13.5],
('C', 'b'): [20, 27.5, 36],
})
df
My initial thought process was to do a .groupby on level=0, axis=1 then use .apply() with a function. Thanks.
答案1
得分: 2
你可以只执行你想要的计算 - 即 (df['A'] * df['B']).div(2)
并将这些值分配给原始DataFrame中的新列。
df[['C', 'a'], ['C', 'b']] = (df['A'] * df['B']).div(2)
A B C
a b a b
0 1 4 7.0 10.0
1 2 5 8.0 11.0
2 3 6 9.0 12.0
英文:
You can just do the calculation you want - i.e, (df['A'] * df['B']).div(2)
and assign the values to new columns in the original DataFrame.
df[[('C', 'a'), ('C', 'b')]] = (df['A'] * df['B']).div(2)
A B C
a b a b a b
0 1 4 7 10 3.5 20.0
1 2 5 8 11 8.0 27.5
2 3 6 9 12 13.5 36.0
答案2
得分: 2
out = df.stack().eval("C = A * B / 2").unstack()
输出:
print(out)
A B C
a b a b a b
0 1 4 7 10 3.5 20.0
1 2 5 8 11 8.0 27.5
2 3 6 9 12 13.5 36.0
英文:
out = df.stack().eval("C = A * B / 2").unstack()
Output :
print(out)
A B C
a b a b a b
0 1 4 7 10 3.5 20.0
1 2 5 8 11 8.0 27.5
2 3 6 9 12 13.5 36.0
答案3
得分: 0
以下是已翻译的代码部分:
pd.concat([df, pd.concat([df.groupby(level=1, axis=1).prod().div(2)], keys=['C'], axis=1)], axis=1)
输出结果:
A B C
a b a b a b
0 1 4 7 10 3.5 20.0
1 2 5 8 11 8.0 27.5
2 3 6 9 12 13.5 36.0
英文:
Here is another way:
pd.concat([df,pd.concat([df.groupby(level=1,axis=1).prod().div(2)],keys =['C'],axis=1)],axis=1)
Output:
A B C
a b a b a b
0 1 4 7 10 3.5 20.0
1 2 5 8 11 8.0 27.5
2 3 6 9 12 13.5 36.0
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论