如何在Pandas DataFrame行中插入元组

时间:2019-08-22 12:08:57

标签: 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

我认为必须有一个更优雅的解决方案,可能使用一些地图功能?

1 个答案:

答案 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