将数据框的行非NA值“按元素”乘以列表

时间:2019-12-04 14:03:23

标签: python pandas list dataframe

假设我们有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 |

2 个答案:

答案 0 :(得分:1)

对可变数量的cumsum使用mulNaN并避免堆栈:

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