python - Pandas - 根据其他 2 列的值创建一列
问题描述
我正在尝试解决 Pandas 上的一些问题,但我不知道从哪里开始。
我有一个包含多列的数据框,但是这个问题感兴趣的看起来像这样:
df = pd.DataFrame(data = {'subject': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'val': [np.nan, 2, np.nan, np.nan, np.nan, 7, np.nan, np.nan, 10]})
subject val
0 1 NaN
1 1 2.0
2 1 NaN
3 2 NaN
4 2 NaN
5 2 7.0
6 3 NaN
7 3 NaN
8 3 10.0
我想创建第三列,对于每个主题,列 val 对应主题的值:
subject val total
0 1 NaN 2
1 1 2.0 2
2 1 NaN 2
3 2 NaN 7
4 2 NaN 7
5 2 7.0 7
6 3 NaN 10
7 3 NaN 10
8 3 10.0 10
我知道我能做到
df[['subject', 'val']].dropna()
获取第三列的值,但这会丢失数据框中的所有其他列(每行具有不同的值)。
谢谢
解决方案
通过使用ffill
和bfill
df['New']=df.groupby('subject').val.apply(lambda x : x.ffill().bfill())
df
Out[257]:
subject val New
0 1 NaN 2.0
1 1 2.0 2.0
2 1 NaN 2.0
3 2 NaN 7.0
4 2 NaN 7.0
5 2 7.0 7.0
6 3 NaN 10.0
7 3 NaN 10.0
8 3 10.0 10.0
推荐阅读
- sql - 获取以前的结清余额作为日期范围的未结余额
- java - 您如何在 Android 中从您的应用中注销(youtube、twitter 等)会话
- commaide - 单击“运行”后的空输出
- sql - 在 SQL Server 中将基数 10 转换为基数 2 以获得非常大的数字
- html - 为什么我看不到我的卡片是 flex 或 grid 布局?
- google-cloud-platform - 谷歌云项目合并
- python - 使用 Scrapy 抓取 json 文件的多个 url
- c# - 运行测试时更新 DataGridView
- python - 如何构建包装 pytest 插件?
- html - 输入文本字段在移动视图中变为只读