Pandas 将流程函数应用于数据帧中的组

Pandas 将流程函数应用于数据帧中的组,pandas,pandas-groupby,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]}) 但我想做的一件难以描述的事情是应用这个函数:

我有一个数据帧,如下所示:

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是a1,也就是a组,所以a组的Z增加到1.5。然后下一个是0,所以它回到0.5,然后还有2个1,所以它最终是2.5

这将给我:

X   Z
A   2.5
B   -1.5

您可以修改第一个数据帧,并将
sum
与索引对齐一起使用

  • 0->-1
    (找到零时减去1)
  • NaN-->0
    (当找到
    NaN
    时保持不变


您可以修改第一个数据帧,并将
sum
与索引对齐一起使用

  • 0->-1
    (找到零时减去1)
  • NaN-->0
    (当找到
    NaN
    时保持不变


如果你的
Y
不是数字,你需要做
df_1.Y=pd.to_numeric(df_1.Y)
对不起,你需要使用
pd.to_numeric(df_1.Y,errors='concure'))
如果您的
Y
不是数字,您需要执行
df_1.Y=pd.to_numeric(df_1.Y)
对不起,您需要使用
pd.to_numeric(df_1.Y,errors='concurve')
df_1['Y'] = pd.to_numeric(df_1.Y, errors='coerce')

u = df_1.assign(Z=df_1.Y.replace({0: -1, np.nan: 0})).groupby('X')['Z'].sum().to_frame()

df_2 = df_2.set_index('X') + u
     Z
X
A  2.5
B -1.5