这里有一个示例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)))
这行不通。
答案 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