首页 > 解决方案 > 如何将元组插入到熊猫 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

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

标签: pandasdataframe

解决方案


在缺少值的行上应用一个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

推荐阅读