我正在尝试添加所有行,因此可以看到如下所示,它必须只添加(1)在正常运行时间,(2)在停机时间,(3)在PM
`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
发布于 2021-06-01 09:48:59
带有列表理解的选项:
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
发布于 2021-06-01 09:36:41
尝试使用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
发布于 2021-06-01 09:35:11
尝试:
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
https://stackoverflow.com/questions/67786196
复制相似问题