我不知道该怎么问,所以我举了一个例子。 目的是将 A 和 B 列的值与 C , D 和 E 。 如果该值等于或大于(> =),则返回“ 1”,否则返回“ 0”。
A B C D E
1 101 103 100 101 99
2 102 100 101 99 103
3 100 99 103 100 98
期望的结果是这样
A B
C D E C D E
1 1 1 1 1 1
1 1 0 0 1 0
0 1 1 0 0 1
理想情况下,我想要一个函数,什么是最好的方法?
答案 0 :(得分:1)
您可以使用le
来检查每一列是否等于或小于A
,然后等于B
:
cols = ['A', 'B']
compare = ['C', 'D', 'E']
for col in cols:
print(col)
df[compare].le(df[col], axis=0).astype(int)
输出
A
C D E
0 1 1 1
1 1 1 0
2 0 1 1
B
C D E
0 1 1 1
1 0 1 0
2 0 0 1
使用列名作为键来做字典会更优雅:
cols = ['A', 'B']
compare = ['C', 'D', 'E']
dct = {col: df[compare].le(df[col], axis=0).astype(int) for col in cols}
print(dct['A'], '\n')
print(dct['B'])
输出
C D E
0 1 1 1
1 1 1 0
2 0 1 1
C D E
0 1 1 1
1 0 1 0
2 0 0 1
答案 1 :(得分:1)
广播如何?
compares = df[['A','B']].values[:,:,None] >= df[['C','D','E']].values[:,None, :]
compares = compares.reshape(len(df),-1)
pd.DataFrame(compares,
columns=pd.MultiIndex.from_product((list('AB'),list('CDE')))
).astype(int)
输出:
A B
C D E C D E
0 1 1 1 1 1 1
1 1 1 0 0 1 0
2 0 1 1 0 0 1
答案 2 :(得分:1)
例如,在您的情况下,df
是此数据帧
A B C D E
1 101 103 100 101 99
2 102 100 101 99 103
3 100 99 103 100 98
您可以执行以下操作将A与C,D和E进行比较:
df[['C', 'D', 'E']].apply(lambda x: df['A'] >= x)
这将为您提供:
C D E
True True True
True True False
False True True
使用True = 1
和False = 0
。您可以这样做,将B与C,D和E进行比较。我希望这会有所帮助。
答案 3 :(得分:1)
将A
和B
与C, D, E
直接比较,然后concat
一起
A = df[['C','D','E']].le(df[['A']].values).astype(int)
B = df[['C','D','E']].le(df[['B']].values).astype(int)
pd.concat([A,B], axis=1, keys=['A','B'])
Out[650]:
A B
C D E C D E
1 1 1 1 1 1 1
2 1 1 0 0 1 0
3 0 1 1 0 0 1