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

我有一个熊猫数据框位置


        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

有更快的方法吗?


慕神8447489
浏览 93回答 3
3回答

慕仙森

我会crosstab做updatex.update(pd.crosstab(df.row,df.column).eq(1))xOut[44]:   Brazil Canada    USA1  False  False  False2  False  False  False3   True  False   True4  False  False  False5  False  False  False6  False  False   True7  False   True  False

米脂

您可以旋转positions表格:s = (df.assign(dummy=True).set_index(['row','column'])       ['dummy'].unstack(fill_value=False)    )x |= s输出:   Brazil  Canada    USA1   False   False  False2   False   False  False3    True   False   True4   False   False  False5   False   False  False6   False   False   True7   False    True  False

慕斯709654

searchsorted和切片分配iloc这假定index和columnsinx已排序。我们将使用iloc和位置元组来分配值Truei = tuple(x.index.searchsorted(df.row))j = tuple(x.columns.searchsorted(df.column))x.iloc[[i, j]] = Truex   Brazil  Canada    USA1   False   False  False2   False   False  False3    True   False   True4   False   False  False5   False   False  False6   False   False   True7   False    True  False
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python