gpt4 book ai didi

python - 根据列名称替换 pandas 数据框中的值

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:45 26 4
gpt4 key购买 nike

我想根据列名称替换另一个系列中的 pandas 数据框中的值。我有福尔。数据框:

Y2000   Y2001   Y2002    Y2003    Y2004    Item    Item Code
34 43 0 0 25 Test Val

我还有另一个系列:

Y2000    41403766
Y2001 45283735
Y2002 47850796
Y2003 38639101
Y2004 45226813

如何根据第二个系列中的值替换第一个数据帧中的值?

--更多编辑:要重现问题,代码和数据位于:umd.box.com/s/hqd6oopj6vvp4qvpwnj8r4lm3z7as4i3

运行代码的说明:

运行此代码:

  1. 将 config_rotations.txt 中的 data_dir 替换为输入目录的路径,即保存文件的位置

  2. 将 config_rotations.txt 中的 out_dir 替换为您想要的任何输出路径

  3. 运行 python 代码\crop_stats.py。问题出在crop_stats.py的第133行

--编辑:

根据@Andy的查询,这是我想要的结果:

Y2000      Y2001   Y2002     Y2003      Y2004          Item    Item Code
41403766 45283735 47850796 38639101 45226813 Test Val

我试过了

df_a.replace(df_b)

但这不会改变 df_a 中的任何值

最佳答案

您可以在 reshape 后从该系列构造一个 df 并覆盖列:

In [85]:
df1[s.index] = pd.DataFrame(columns = s.index, data = s.values.reshape(1,5))
df1

Out[85]:
Y2000 Y2001 Y2002 Y2003 Y2004 Item Item Code
0 41403766 45283735 47850796 38639101 45226813 Test Val

因此,这使用系列索引值从 df 中进行子选择,然后从同一系列构造一个 df,这里我们必须 reshape 数组以生成单行 df

编辑

我上面的代码无法在您的真实代码上运行的原因首先是在分配时您不能执行此操作:

df.loc[(df['Country Code'] == replace_cnt) & (df['Item'] == crop)][s.index]

这称为链式索引并会引发警告,请参阅 docs .

因此,要纠正此问题,您可以将列放入 [] 中:

df.loc[(df['Country Code'] == replace_cnt) & (df['Item'] == crop),s.index]

此外,pandas 尝试沿着索引值和列名称对齐,如果它们不匹配,那么您将得到 NaN值,因此您可以通过调用 .values 来解决此问题获取一个 np 数组,它只是成为没有索引或列标签的匿名数据,只要数据形状为 broadcast-able然后它会做你想做的事:

df.loc[(df['Country Code'] == replace_cnt) & (df['Item'] == crop),s.index] = pd.DataFrame(columns=s.index, data=s.values.reshape(1, len(s.index))).values

关于python - 根据列名称替换 pandas 数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32726105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com