基于来自另一个熊猫数据框的值填充一个熊猫数据框的最快方法是什么?

时间:2020-06-02 15:36:09

标签: python pandas numpy dataframe

我有一个熊猫数据框位置

        row    column
  1      3     Brazil
  2      6     USA
  3      3     USA
  4      7     Canada

和另一个 x

        Brazil   Canada  USA
  1     False    False   False
  2     False    False   False
  3     False    False   False
  4     False    False   False
  5     False    False   False
  6     False    False   False
  7     False    False   False

我想根据第一个中的值填充第二个,所以结果是:

        Brazil   Canada  USA
  1     False    False   False
  2     False    False   False
  3     True     False   True
  4     False    False   False
  5     False    False   False
  6     False    False   True
  7     False    True    False

我正在使用 iterrows()

  for i, r in positions.iterrows():
      x.at[r['row'],r['column']] = True

有更快的方法吗?

3 个答案:

答案 0 :(得分:4)

我将用crosstabupdate

x.update(pd.crosstab(df.row,df.column).eq(1))
x
Out[44]: 
  Brazil Canada    USA
1  False  False  False
2  False  False  False
3   True  False   True
4  False  False  False
5  False  False  False
6  False  False   True
7  False   True  False

答案 1 :(得分:2)

您可以旋转positions表:

s = (df.assign(dummy=True).set_index(['row','column'])
       ['dummy'].unstack(fill_value=False)
    )
x |= s

输出:

   Brazil  Canada    USA
1   False   False  False
2   False   False  False
3    True   False   True
4   False   False  False
5   False   False  False
6   False   False   True
7   False    True  False

答案 2 :(得分:2)

searchsorted和带有iloc的切片分配

这假设index中的columnsx已排序。

我们将使用iloc和头寸元组来分配True的值


i = tuple(x.index.searchsorted(df.row))
j = tuple(x.columns.searchsorted(df.column))

x.iloc[[i, j]] = True
x


   Brazil  Canada    USA
1   False   False  False
2   False   False  False
3    True   False   True
4   False   False  False
5   False   False  False
6   False   False   True
7   False    True  False