基于列名替换pandas数据帧中的值

2024-09-28 17:04:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据列名替换来自另一系列的pandas数据帧中的值。我有foll。数据帧:

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

我还有另一个系列:

^{pr2}$

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

--更多编辑: 要重新创建问题,代码和数据如下:umd.box.com/s/hqd6oopj6vvp4qvpwnj8r4lm3z7as4i3

运行代码的说明:

要运行此代码:

  1. 在配置中替换data_dir_旋转.txt输入目录的路径,即文件保存的位置

  2. 在配置中替换out_dir_旋转.txt使用您想要的任何输出路径

  3. 运行python code\crop_统计.py. 问题出在作物的第133行_统计.py

--编辑:

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

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

我试过了

df_a.replace(df_b)

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


Tags: 数据代码testtxt编辑dfdircode
1条回答
网友
1楼 · 发布于 2024-09-28 17:04:30

在重塑和覆盖列之后,可以从序列构造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,这里我们必须重塑数组以生成一个单行df

编辑

我上面的代码在你的真实代码上不起作用的原因首先是在分配时你不能这样做:

^{pr2}$

这称为链式索引,并引发一个警告,请参阅docs。在

因此,要更正此问题,可以将列放在[]中:

^{3}$

另外,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

相关问题 更多 >