我想基于元组中的值在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
我认为必须有一个更优雅的解决方案,可能使用一些地图功能?
答案 0 :(得分:0)
在缺少值的行上应用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