如何基于索引从另一个df获取列的值?熊猫

时间:2019-09-03 09:32:00

标签: pandas

我有2个数据帧,我想根据它们的索引从第二个数据帧中获取包含数据的第一个数据帧。问题是我反复进行,每次迭代只有第一个df的列索引号增加一个,因此会导致错误。

示例如下: 第一次迭代后的第一个df:

          0
 440  7.691

第一次迭代后的第二个df(每次迭代后不会更改):

      1
 0    M
 1    M
 2    M
 3    M
 4    M
 ..  ..
 440  B
 441  M
 442  M

运行代码时,得到想要的df:

df_with_label = first_df.join(self.second_df)

          0  1
 440  7.691  B

第二次迭代后,现在是我的第一个df:

         1
 3   10.72

当我运行相同的df_with_label = first_df.join(self.second_df)时,我想得到:

        1  2
 3  10.72  M

但是我得到了错误:

ValueError: columns overlap but no suffix specified: Int64Index([1], dtype='int64')

我猜想它有一个问题,即在第二次迭代后,第一个df的列的索引为1,但不知道如何解决。 我想保持第一列的索引不断增加。

最好的解决方案是为第二列提供不同的名称,例如:

            1  class
     3  10.72      M

有什么想法要解决吗?

2 个答案:

答案 0 :(得分:1)

尝试:

df_with_label = first_df.join(self.second_df, rsuffix = "_2")

问题是-df_with_labelsecond_df都具有列1,因此rsuffix会将"_2"添加到second_df列名{{1} }。您需要加入索引,因此默认情况下会显示其他所有列-因此您需要避免命名冲突。

REF https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.join.html

答案 1 :(得分:1)

如果我做对了,那么您的第二个数据帧不会随着迭代而改变,那么为什么不彻底改变它的列名:

second_df.columns=['colname']

这应该可以解决您的命名冲突。