我有一个数据框,像这样:
df_1 = pd.DataFrame({'X' : ['A','A','A','A','B','B','B'],
'Y' : [1, 0, 1, 1, 0, 0,'Nan']})
我想按X分组并创建Z列:
df_2 = pd.DataFrame({'X' : ['A','B'],
'Z' : [0.5, 0.5]})
但是我想做的一件难以描述的事情是应用此功能:
def fun(Y,Z):
if Y == 1:
Z = Z + 1
elif Y == 0:
Z = Z - 1
因此df_1中的第一个Y为1,即在组A中,因此组A的Z增加到1.5。然后下一个是0,然后又回到0.5,然后又有2个1,最后是2.5。
哪个会给我的?
X Z
A 2.5
B -1.5
答案 0 :(得分:2)
您可以修改第一个DataFrame并将sum
用于索引对齐。
0 -> -1
(找到零时减去1)NaN --> 0
(在找到NaN
时保持不变u = df_1.assign(Z=df_1.Y.replace({0: -1, np.nan: 0})).groupby('X')['Z'].sum().to_frame()
df_2.set_index('X') + u
Z
X
A 2.5
B -1.5