pandas - 如何将元组插入到熊猫 DataFrame 行中
问题描述
我想根据元组中的值将一行值插入到 DataFrame 中。下面是一个示例,我想从 DataFrame 的 names['blue'] intp 列 'a' 和 'b' 中插入值。
import numpy as np
import pandas as pd
df = pd.DataFrame({'name': ['red', 'blue', 'green'], 'a': [1,np.nan,2], 'b':[2,np.nan,3]})
names = {'blue': (1,2),
'yellow': (5, 5)}
注意我在下面有一个尝试(注意'a'和'b'总是一起丢失):
names_needed = df.loc[df['a'].isnull(), 'name']
subset_dict = {colour:names[colour] for colour in names_needed}
for colour, values in subset_dict.items():
df.loc[df['name']==colour, ['a','b']]=values
我认为必须有一个更优雅的解决方案,可能使用一些地图功能?
解决方案
在缺少值的行上应用一个lambda
函数,然后适当地解包这些值:
names_needed = df.loc[df['a'].isnull(), 'name']
subset_dict = {colour:names[colour] for colour in names_needed}
mask = df['name'].isin(list(subset_dict.keys()))
df.loc[mask, ['a', 'b']] = df[mask].apply(lambda x: subset_dict.get(x["name"]), axis=1).values[0]
然后给你:
df
name a b
0 red 1.0 2.0
1 blue 1.0 2.0
2 green 2.0 3.0
推荐阅读
- r - R替换字符串不像两个字符串?
- azure-data-factory-2 - 如何将大列(> 4000 个字符)从 CSV 导入数据库表
- c++ - 打印 1 到 n 个数字时,我的递归程序出现运行时错误
- mysql - 从一个月的 1-15 和 16-31 中选择总和
- sql - 在 SELECT 中用 'NA' 替换 NULL
- azure-active-directory - 多租户应用程序中的 SSO:恶意管理员怎么办?
- sql - 如何根据重复的行值合并聚合函数结果 | SQL 甲骨文
- react-bootstrap-table - react-bootstrap-table-next 中的 onTableChange 函数总是返回 undefined
- asp.net-core - Blazor 布局中的顶部菜单
- c# - Acumatica 在 2020 r2 上发布自定义表格和自定义表格