使用字典替换 pandas 数据帧上给定索引号上的列值

2023-11-23

考虑以下数据框

df_test = pd.DataFrame( {'a' : [1, 2, 8], 'b' : [np.nan, np.nan, 5], 'c' : [np.nan, np.nan, 4]})
df_test.index = ['one', 'two', 'three']

这使

      a  b   c
one   1 NaN NaN
two   2 NaN NaN
three 8  5   4

我有 b 列和 c 列的行替换字典。例如:

{ 'one': [3.1, 2.2], 'two' : [8.8, 4.4] }

其中 3.1 和 8.8 替换 b 列,2.2 和 4.4 替换 c 列,因此结果为

      a  b   c
one   1 3.1 2.2
two   2 8.8 4.4
three 8  5   4

我知道如何使用 for 循环进行这些更改:

index_list = ['one', 'two']
value_list_b = [3.1, 8.8]
value_list_c = [2.2, 4.4]
for i in range(len(index_list)):
    df_test.ix[df_test.index == index_list[i], 'b'] = value_list_b[i]
    df_test.ix[df_test.index == index_list[i], 'c'] = value_list_c[i]

但我确信有一种更好更快的方法来使用字典!

我想这可以用DataFrame.replace方法,但我想不通。

谢谢您的帮助,

cd


您正在寻找pandas.DataFrame.update。您的情况唯一的变化是您将更新指定为行字典,而 DataFrame 通常是从列字典构建的。这orient关键字可以处理这个问题。

In [24]: import pandas as pd

In [25]: df_test
Out[25]: 
       a   b   c
one    1 NaN NaN
two    2 NaN NaN
three  8   5   4

In [26]: row_replacements = { 'one': [3.1, 2.2], 'two' : [8.8, 4.4] }

In [27]: df_update = pd.DataFrame.from_dict(row_replacements, orient='index')

In [28]: df_update.columns = ['b', 'c']

In [29]: df_update
Out[29]: 
        b     c
one   3.1   2.2
two   8.8   4.4

In [30]: df_test.update(df_update)

In [31]: df_test
Out[31]: 
       a    b    c
one    1  3.1  2.2
two    2  8.8  4.4
three  8  5.0  4.0

pandas.DataFrame.from_dict是一个特定的 DataFrame 构造函数,它为我们提供了orient关键字,如果您只是说,则不可用DataFrame(...)。由于我不知道的原因,我们无法传递列名称['b', 'c'] to from_dict,所以我在单独的步骤中指定了它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用字典替换 pandas 数据帧上给定索引号上的列值 的相关文章

随机推荐