我有 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] 删除。
我来说两句