从基于另一个 DataFrame 的列中减去 1。熊猫

时间:2021-06-10 15:26:47

标签: pandas

试图找出如何根据另一个 DataFrame 中存在的值从一列中减去一个常量。例如,如果我有下面的 DataFrame a,其中包含一个名为 person name 和 count 的列:

a = pd.DataFrame({
      "person":["Bob", "Kate", "Joe", "Mark"],
      "count":[1, 2, 3, 4],
    })
   person  count
0  Bob     3
1  Kate    4
2  Joe     5
2  Mark    4

以及包含 Person 和任何其他任意列的第二个 DataFrame:

b = pd.DataFrame({
      "person":["Bob", "Joe"],
      "foo":['a', 'b'],
    })
   person  foo
0  Bob     a
1  Joe     c

我希望我可以将第一个 DataFrame 更改为如下所示。具体来说,对于 DataFrame count 中的任何 person 实例,将 b 减一。可以安全地假设 DataFrame b 将始终是 DataFrame a 的子集并且 person 将是唯一的。

   Person  Count
0  Bob     2
1  Kate    4
2  Joe     3
2  Mark    4

非常感谢!

3 个答案:

答案 0 :(得分:1)

a["count"] -= a.person.isin(b.person)

使用 isin,我们得到每个人的 TrueFalse 的布尔数组,如果它在另一个人中。然后把它当作整数,我们可以从count列中减去它,

得到

>>> a

  person  count
0    Bob      2
1   Kate      4
2    Joe      4
3   Mark      4

答案 1 :(得分:0)

这个答案假设 df2 可以有一个名称的多个实例。如果它只是一个实例,您可以通过迭代并检查该人是否在第二个数据框中命名来进行减法。在df2

df2_counts = df2['Person'].value_counts()

df1 中,加入这些数据,然后减去计数:

df1['subtracts'] = df1.set_index('Person').join(df2_counts)
df1['count_new'] = df1['count'] - df1['subtracts']

答案 2 :(得分:-1)

从数据集 B 创建一个人名列表:

listDFB=DFB['person'] 

遍历 dfa 以相应地填充新列

for i, rw in dfa.iterrows():
    if rw['person'] in listDFB:
        rw['count']=rw['count']-1