使用另一个 df 计算一个 df 的多个列中值的条件出现

克雷斯托曼奇

我有 2 个数据框;第一个 df_data 看起来像这样:

A   B   C
-----------------
0   0   1
1   4   1
1   10  1
2   8   1
2   9   1
3   7   1
3   4   0
4   8   1
5   8   1
6   7   1
9   17  1
9   13  1

...

所需的输出 (df_output) 如下所示:

Day Zt  Zr
-----------------
1   2   0
2   4   0
3   5   1
4   6   1
5   6   0
6   7   0
7   7   0
8   5   0
9   5   0
10  5   0
11  5   0
12  6   0

...

基本上我创建了一个新的数据框(df_output),它只填充了天数,代表给定月份的每一天。我一直在试图弄清楚如何根据以下条件计算 df_data 中值的出现次数(这些条件实际上不起作用,因为它是从不同的 df 中提取的):

df_output['Zt'] = (df_data['A'] <= df_output['Day']) & (df_data['B'] >= df_output['Day']) & (df_data['C'] == 1).count()

df_output['Zr'] = (df_data['A'] <= df_output['Day']) & (df_data['B'] >= df_output['Day']) & (df_data['C'] == 0).count()

以更易读的格式计算 Zt 和 Zr 的逻辑是(如果它是一个函数):

def countZt():
   for each day in df_output['Day']:
   Zt = 0
      for each row in df_data:
         if (df_data['A'] <= day) and (df_data['B'] >= day) and (df_data['C'] == 1):
            Zt = Zt + 1
   return Zt

def countZr():
   for each day in df_output['Day']:
   Zr = 0
      for each row in df_data:
         if (df_data['A'] <= day) and (df_data['B'] >= day) and (df_data['C'] == 0):
            Zr = Zr + 1
   return Zr

您可以看到 Zt 和 Zr 之间的唯一区别是,一个是在 Bool (C) 为 True 的地方计数,另一个是在为 False 的地方计数。

我在这个主题上发现的资源仅指导如何在同一个数据帧中创建条件,但是资源的稀缺/缺乏显示了如何使用一个数据帧的值来计算另一个数据帧的值。任何为我指明正确方向的帮助将不胜感激!谢谢!

奥尼亚布

我们可以在比较之前重塑,如下所示:

cond = (df.A.values<=df_output.Day[:,None])&(df.B.values>=df_output.Day[:,None])
df_output.assign(Zt = cond.dot(df.C),Zr = cond.dot(1-df.C))
    Day  Zt  Zr
0     1   2   0
1     2   4   0
2     3   5   1
3     4   6   1
4     5   6   0
5     6   7   0
6     7   7   0
7     8   5   0
8     9   4   0
9    10   3   0
10   11   2   0
11   12   2   0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用另一个df替换列值

将值分配给另一个df的df $列?

使用R中的查找表基于另一个df创建新列

给列一个名称,使用循环在另一个df / list中已经指定的名称

拆分特定的PySpark df列并创建另一个DF

如何计算一个df列的时间值是另一个df.column的一部分?

根据条件将df中的列除以另一个df值

在一个df中使用名称创建另一个数据框的相同列副本

根据另一个df列的值范围设置熊猫df列的值

从一个df提取列的子集,然后从另一个df粘贴到行中

根据一个键将数据从df复制到多列中的另一个df

如何通过熊猫将特定的列从一个df复制/粘贴到另一个df

pandas:从一个df中搜索包含列表的另一个df列中的列值

使用dplyr以便根据另一个df更改列值

根据条件从第一个df到另一个df的列值

熊猫根据其他列的值从另一个更新一个df

将列df值追加到另一个df

将一个df的一列连接到另一个df的所有列

Pandas:当列值与另一个 DF 的列值匹配时提取 DF 的行

从另一个 df 插入 df 时的空列

根据另一个 df 的列删除 df 行

在具有特定列的for循环中将df附加到另一个df?

使用另一个 DF 的列(两个 DF 中的列相同)过滤 DF Spark Scala

根据另一个 df 更改 df1 列中的值

使用一个 df 列过滤另一个 df,多个过滤器

当多个条件为真时,根据来自另一个 df 的行创建 df

DF 中的值基于另一个 DF 的值和条件

熊猫:将列从另一个df插入到某个位置的新df

根据另一个df中的列计算一个df中的行数