假设我们有pandas.DataFrame:
| na | na | 3 | 3 | 5 | 2. |
| na | 5 .. | 2 | 2 | 1 | na |
| 1 .. | 2 .. | 2 | 3 | na | na |
想法是将每行乘以const列表,例如= [0,1,2,3] 如果我们在一列中没有na,那么结果中它仍然应该是na:
| na | na | 0 | 3 | 10 | 6 |
| na | 0 | 2 | 4 | 3 | na |
| 0 | 2 | 4 | 9 | na | na |
答案 0 :(得分:1)
对可变数量的cumsum
使用mul
和NaN
并避免堆栈:
df.mul(df.notnull().cumsum(1).sub(1))
0 1 2 3 4 5
0 NaN NaN 0 3 10.0 6.0
1 NaN 0.0 2 4 3.0 NaN
2 0.0 2.0 4 9 NaN NaN
答案 1 :(得分:0)
IIUC,您可以堆叠然后拆栈:
df.stack().mul(np.tile(const, df.shape[0])).unstack()
输出:
0 1 2 3 4 5
0 NaN NaN 0.0 3.0 10.0 6.0
1 NaN 0.0 2.0 4.0 3.0 NaN
2 0.0 2.0 4.0 9.0 NaN NaN