Python将函数应用于多个编号的列

时间:2018-07-10 13:45:31

标签: python pandas function dataframe apply

这里有一个示例Datarame。

A={'a_1':[1,2,3,4,5],'a_2':[6,7,8,9,4],'a_3':[0,6,2,4,7],'a_4':[3,5,2,4,6],
   'b_1':[1,2,6,4,3],'b_2':[6,7,3,2,4],'b_3':[0,7,2,4,7],'b_4':[3,3,2,4,8]
   }

data=pd.DataFrame.from_dict(A)

输出:

a_1 a_2 a_3 a_4 b_1 b_2 b_3 b_4
1   6   0   3   1   6   0   3
2   7   6   5   2   7   7   3
3   8   2   2   6   3   2   2
4   9   4   4   4   2   4   4
5   4   7   6   3   4   7   8

我想做的是比较以 a 开头的列与以 0 开头的 b 开头的列之间的差异。

喜欢

max(data[a_]- data[b_], 0)

有人知道如何在数据框中应用这样的功能吗?

我尝试过的是

def test_(row,column_1,column_2):
    result=max(row[column_1].any() - row[column_2].any(),0)

data['result']=np.nan
for i in range(1,5):
    data['result']=data.apply(test_(data,'a'+str(i),'b'+str(i)))

这行不通。

3 个答案:

答案 0 :(得分:0)

您可以使用numpy的{​​{1}}应用于整个列。然后,只需遍历所有已编号的列,然后将新列添加为数据框

maximum

答案 1 :(得分:0)

您可以先创建defaults列,然后使用groupby

diff

然后我们使用df=data.groupby(data.columns.str.split('_').str[1].values,axis=1).diff().dropna(1) df Out[347]: b_1 b_2 b_3 b_4 0 0.0 0.0 0.0 0.0 1 0.0 0.0 1.0 -2.0 2 3.0 -5.0 0.0 0.0 3 0.0 -7.0 0.0 0.0 4 -2.0 0.0 0.0 2.0

mask

答案 2 :(得分:0)

A={'a_1':[1,2,3,4,5],'a_2':[6,7,8,9,4],'a_3':[0,6,2,4,7],'a_4':[3,5,2,4,6],
   'b_1':[1,2,6,4,3],'b_2':[6,7,3,2,4],'b_3':[0,7,2,4,7],'b_4':[3,3,2,4,8]
   }

data=pd.DataFrame.from_dict(A)


x = data.iloc[:,0:4].values - data.iloc[:,4:].values
print(x)

x = pd.DataFrame(x)
print(x)

输出:

[[ 0  0  0  0]
 [ 0  0 -1  2]
 [-3  5  0  0]
 [ 0  7  0  0]
 [ 2  0  0 -2]]


   0  1  2  3
0  0  0  0  0
1  0  0 -1  2
2 -3  5  0  0
3  0  7  0  0
4  2  0  0 -2