【发布时间】:2021-04-07 09:28:37
【问题描述】:
我有一个数据框,其名称为 'a'、'b'、'c'、'd'、'e'
#Input
import pandas as pd
import numpy as np
list_of_dicts = [
{'a' : np.nan, 'b' : 4, 'c' : np.nan, 'd' : 5, 'e' : 2},
{'a' : 1, 'b' : np.nan, 'c' : np.nan, 'd' : np.nan, 'e' : np.nan},
{'a' : 7, 'b' : 5, 'c' : 0, 'd' : 5, 'e' : 3 },
{'a' : np.nan, 'b' : 3, 'c' : np.nan, 'd' : 5, 'e' : np.nan },
{'a' : np.nan, 'b' : np.nan, 'c' : np.nan, 'd' : np.nan, 'e' : np.nan }
]
df = pd.DataFrame(list_of_dicts)
#Input DataFrame
-----|-------|-------|-------|------|------|
| a | b | c | d | e |
-----|-------|-------|-------|------|------|
0 | NaN | 4 | NaN | 5 | 2 |
1 | 1 | NaN | NaN | NaN | NaN |
2 | 7 | 5 | 0 | 5 | 3 |
3 | NaN | 3 | NaN | 5 | NaN |
4 | NaN | NaN | NaN | NaN | NaN |
我想创建一个新列 Op,它从右边开始取第一列,不是 NaN 并填充值。如果所有观测值都是 NaN,则 Op = NaN。
#Output
-----|-------|-------|-------|------|------|------|
| a | b | c | d | e | Op |
-----|-------|-------|-------|------|------|------|
0 | NaN | 4 | NaN | 5 | 2 | 2 |
1 | 1 | NaN | NaN | NaN | NaN | 1 |
2 | 7 | 5 | 0 | 5 | 3 | 3 |
3 | NaN | 3 | NaN | 5 | NaN | 5 |
4 | NaN | NaN | NaN | NaN | NaN | NaN |
解释:
- 第 0 行 - 因为 'e' 是从右侧算起的第一列,不是 NaN,所以 Op = 2
- 第 1 行 - 因为 'a' 是从右侧算起的第一列,不是 NaN,所以 Op = 1
- 第 2 行 - 因为 'e' 是从右边算起的第一列,不是 NaN,所以 Op = 3
- 第 3 行 - 由于 'd' 是从右侧算起的第一列,不是 NaN,所以 Op = 5
- 第 4 行 - 因为所有行都是 NaN,所以 Op = NaN
寻找使用 Python、Pandas 和 numpy 的解决方案。
【问题讨论】:
标签: python pandas dataframe numpy