我有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),其中仅填充了Days,它表示给定月份的每一天。我一直在尝试根据以下条件来计算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之间的唯一区别是,一个计数的是布尔(C)为True的那个,另一个计数的是False。
我在本主题中发现的资源仅指导如何在同一数据框内进行条件设置,但是缺乏/缺乏资源表明如何使用一个数据框的值来计数另一个数据框。向我指出正确方向的任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
我们可以在进行比较之前重塑形状,如下所示:
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