我刚开始学习大熊猫,这是一个非常基本的问题。相信我,我已经找到了答案,但找不到答案。
你可以运行这个python代码吗?
import pandas as pd
df = pd.DataFrame({'A':[1,0], 'B':[2,4], 'C':[4,4], 'D':[1,4],'count__4s_abc':[1,2],'sum__abc':[7,8]})
df
如何创建列'count__4s_abc',其中我想计算数字4在A-C列中出现的次数? (忽略D列。)
如何创建列'sum__abc',其中我想在A-C列中对金额求和? (忽略D列。)
非常感谢您的帮助!
答案 0 :(得分:4)
使用drop
df.assign(
count__4s_abc=df.drop('D', 1).eq(4).sum(1),
sum__abc=df.drop('D', 1).sum(1)
)
或明确选择3列。
df.assign(
count__4s_abc=df[['A', 'B', 'C']].eq(4).sum(1),
sum__abc=df[['A', 'B', 'C']].sum(1)
)
或使用iloc
获取前3列。
df.assign(
count__4s_abc=df.iloc[:, :3].eq(4).sum(1),
sum__abc=df.iloc[:, :3].sum(1)
)
全部给予
A B C D count__4s_abc sum__abc
0 1 2 4 1 1 7
1 0 4 4 4 2 8
答案 1 :(得分:2)
另外一个选项:
In [158]: formulas = """
...: new_count__4s_abc = (A==4)*1 + (B==4)*1 + (C==4)*1
...: new_sum__abc = A + B + C
...: """
In [159]: df.eval(formulas)
Out[159]:
A B C D count__4s_abc sum__abc new_count__4s_abc new_sum__abc
0 1 2 4 1 1 7 1 7
1 0 4 4 4 2 8 2 8
DataFrame.eval()
method can (but not always) be faster compared to regular Pandas arithmetic