将过程函数应用于数据框中的组

时间:2019-04-26 16:08:12

标签: pandas pandas-groupby

我有一个数据框,像这样:

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

1 个答案:

答案 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