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
与索引对齐一起使用
(找到零时减去1)0->-1
(当找到NaN-->0
时保持不变NaN
您可以修改第一个数据帧,并将
sum
与索引对齐一起使用
(找到零时减去1)0->-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