Python 如何比较行值和来自另一个数据帧的组值之和?
我有两个数据帧,看起来像这样Python 如何比较行值和来自另一个数据帧的组值之和?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有两个数据帧,看起来像这样 df1 = pd.DataFrame({'A': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'], 'B': ['C1', 'C1', 'C1', 'C1', 'C2', 'C2', 'C2', 'C2'], 'Y': [0, 1, 1, 0, 1, 1, 0, 1], 'Z': [4, 5, 2, 1, 2, 1
df1 = pd.DataFrame({'A': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
'B': ['C1', 'C1', 'C1', 'C1', 'C2', 'C2', 'C2', 'C2'],
'Y': [0, 1, 1, 0, 1, 1, 0, 1],
'Z': [4, 5, 2, 1, 2, 1, 3, 5]})
Out[51]:
A B Y Z
0 A C1 0 4
1 B C1 1 5
2 C C1 1 2
3 D C1 0 1
4 E C2 1 2
5 F C2 1 1
6 G C2 0 3
7 H C2 1 5
df2 = pd.DataFrame({'A': ['A', 'B', 'E', 'F', 'H'],
'B': ['C1', 'C1', 'C2', 'C2', 'C2'],
'V': [2, 3, 1, 4, 2]})
Out[52]:
A B V
0 A C1 2
1 B C1 3
2 E C2 1
3 F C2 4
4 H C2 2
我想选择df1中Y==1和Z.cumsum()的所有行,您可以使用df1.B上的
map
和df2的结果。请注意,我使用了where
和notloc
,它们只是将Z中的值替换为nan,而不是Y==1
print(df1[df1['Z'].where(df1['Y']==1).groupby(df1['B']).cumsum()
<=df1['B'].map(df2.groupby('B')['V'].sum())])
A B Y Z
1 B C1 1 5
4 E C2 1 2
5 F C2 1 1
print(df1[df1['Z'].where(df1['Y']==1).groupby(df1['B']).cumsum()
您可以使用df1.B上的map
和来自df2的结果。请注意,我使用where
和notloc
来替换Z中不是Y==1的值
print(df1[df1['Z'].where(df1['Y']==1).groupby(df1['B']).cumsum()
<=df1['B'].map(df2.groupby('B')['V'].sum())])
A B Y Z
1 B C1 1 5
4 E C2 1 2
5 F C2 1 1
print(df1[df1['Z'].where(df1['Y']==1).groupby(df1['B']).cumsum()
print(df1[df1['Z'].where(df1['Y']==1).groupby(df1['B']).cumsum()
<=df1['B'].map(df2.groupby('B')['V'].sum())])
A B Y Z
1 B C1 1 5
4 E C2 1 2
5 F C2 1 1