如何在下面的 table 中使用 pandas 中的求和函数
How to use sum function in pandas from the table present below
我正在尝试添加所有行以便可以看到它,它必须只添加 (1) 正常运行时间,(2) 停机时间,(3) 下午。
`df = DataFrame({'A' : ['a','b','c','d','e'], 'B' : [1,1,3, 2,1],'C':[1,1,2,3,1],'D':[1,1,1,2,3].'E':[1,2,3,1,1]})
df
A B C D E Uptime Downtime P.M
a 1 1 1 1 4
b 1 1 1 2 3 2
c 3 2 1 3 1 2 6
d 2 3 2 1 1 4 3
e 1 1 3 1 3 3
尝试:
m_1 = df == 1
m_2 = df == 2
m_3 = df == 3
df["Uptime"] = (m_1).sum(axis=1).astype(int)
df["Downtime"] = (m_2 * 2).sum(axis=1).astype(int)
df["P.M"] = (m_3 * 3).sum(axis=1).astype(int)
print(df)
打印:
A B C D E Uptime Downtime P.M
0 a 1 1 1 1 4 0 0
1 b 1 1 1 2 3 2 0
2 c 3 2 1 3 1 2 6
3 d 2 3 2 1 1 4 3
4 e 1 1 3 1 3 0 3
试试 where
和 sum(1)
:
df = df.set_index('A')
cols = df.columns
df['Uptime'] = df[cols].where(df[cols].eq(1), 0).sum(1)
df['Downtime'] = df[cols].where(df[cols].eq(2), 0).sum(1)
df['P.M'] = df[cols].where(df[cols].eq(3), 0).sum(1)
输出:
B C D E Uptime Downtime P.M
A
a 1 1 1 1 4 0 0
b 1 1 1 2 3 2 0
c 3 2 1 3 1 2 6
d 2 3 2 1 1 4 3
e 1 1 3 1 3 0 3
具有列表理解的选项:
df[['Uptime', 'Downtime', 'P.M.']] = pd.concat(
[(df.eq(x)*x).sum(1) for x in range(1, 4)], 1)
输出:
A B C D E Uptime Downtime P.M.
0 a 1 1 1 1 4 0 0
1 b 1 1 1 2 3 2 0
2 c 3 2 1 3 1 2 6
3 d 2 3 2 1 1 4 3
4 e 1 1 3 1 3 0 3
我正在尝试添加所有行以便可以看到它,它必须只添加 (1) 正常运行时间,(2) 停机时间,(3) 下午。
`df = DataFrame({'A' : ['a','b','c','d','e'], 'B' : [1,1,3, 2,1],'C':[1,1,2,3,1],'D':[1,1,1,2,3].'E':[1,2,3,1,1]})
df
A B C D E Uptime Downtime P.M
a 1 1 1 1 4
b 1 1 1 2 3 2
c 3 2 1 3 1 2 6
d 2 3 2 1 1 4 3
e 1 1 3 1 3 3
尝试:
m_1 = df == 1
m_2 = df == 2
m_3 = df == 3
df["Uptime"] = (m_1).sum(axis=1).astype(int)
df["Downtime"] = (m_2 * 2).sum(axis=1).astype(int)
df["P.M"] = (m_3 * 3).sum(axis=1).astype(int)
print(df)
打印:
A B C D E Uptime Downtime P.M
0 a 1 1 1 1 4 0 0
1 b 1 1 1 2 3 2 0
2 c 3 2 1 3 1 2 6
3 d 2 3 2 1 1 4 3
4 e 1 1 3 1 3 0 3
试试 where
和 sum(1)
:
df = df.set_index('A')
cols = df.columns
df['Uptime'] = df[cols].where(df[cols].eq(1), 0).sum(1)
df['Downtime'] = df[cols].where(df[cols].eq(2), 0).sum(1)
df['P.M'] = df[cols].where(df[cols].eq(3), 0).sum(1)
输出:
B C D E Uptime Downtime P.M
A
a 1 1 1 1 4 0 0
b 1 1 1 2 3 2 0
c 3 2 1 3 1 2 6
d 2 3 2 1 1 4 3
e 1 1 3 1 3 0 3
具有列表理解的选项:
df[['Uptime', 'Downtime', 'P.M.']] = pd.concat(
[(df.eq(x)*x).sum(1) for x in range(1, 4)], 1)
输出:
A B C D E Uptime Downtime P.M.
0 a 1 1 1 1 4 0 0
1 b 1 1 1 2 3 2 0
2 c 3 2 1 3 1 2 6
3 d 2 3 2 1 1 4 3
4 e 1 1 3 1 3 0 3