如何基于另一个 Pandas 数据框中的值填充一个 Pandas 数据框以最快的方式?

3

我有一个Pandas数据框position

        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个回答

4

我将使用update来做交叉表格。

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

使用 crosstab 是聪明的选择。 - piRSquared
当我使用它时,它可以工作,但是X上的某些值现在是“对象”而不是“布尔”了。有什么建议吗? - Luiz Fernando Puttow Southier
@LuizFernandoPuttowSouthier 对象?你可以打印 df.USA 来检查类型吗? - BENY

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

我喜欢or_equals。 - piRSquared

2

searchsortediloc的切片赋值

这假设x中的indexcolumns已经排序。

我们将使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接