在两个不同数据帧的行和列中是否存在条件时进行应用。
df1
X1 X2 X3 X4 X5
10 12 8 4 6
df2
class MARKS
class_1 8
class_2 6
class_3 9
class_4 10
class_5 11
class_6 8
class_7 5
class_8 4
class_9 7
class_10 5
预期输出:
class 1 Y Y FALSE FALSE FALSE
class 2 Y Y Y FALSE FALSE
class 3 Y Y FALSE FALSE FALSE
class 4 FALSE Y FALSE FALSE FALSE
class 5 FALSE Y FALSE FALSE FALSE
class 6 Y Y FALSE FALSE FALSE
class 7 Y Y Y FALSE Y
class 8 Y Y Y FALSE Y
class 9 Y Y Y FALSE FALSE
class 10 Y Y Y FALSE Y
formula: =IF($A$2>$I2,"Y")
FOR CLASS 1 - I2 WILL BE CONSTANT
例如:其中A2 = df1的10,I2 = df2的8。如果10> 8,则打印Y,否则条件失败并打印FALSE。
FOR CLASS 2 - I3 WILL BE CONSTANT
FORMULA =IF($A$2>$I3,"Y")
Similary,其中B2 = DF1为12,I3 = df2为6,因此,如果12> 6打印Y,则条件失败并打印FALSE。
code i tried:
df1 = pd.read_csv("df1.csv")
df2 = pd.read_csv("df2.csv")
y = df2.MARKS
Res = apply(data[3,],2,function(x)
if x <= y:
print("FALSE")
else:
print("Y")
Res
ERROR:
File "<ipython-input-27-083bd28bed08>", line 2
if x <= y:
^
SyntaxError: invalid syntax
请帮助。
答案 0 :(得分:1)
使用np.less.outer
广播比较df1
和df2
中的所有值
a = df1.values.ravel()
b = df2.MARKS.values
pd.DataFrame(np.where(np.less.outer(b, a), 'Y', 'FALSE'), index=df2['class'])
# If you don't really want 'Y' and 'FALSE', replace those values with what you do want
0 1 2 3 4
class
class_1 Y Y FALSE FALSE FALSE
class_2 Y Y Y FALSE FALSE
class_3 Y Y FALSE FALSE FALSE
class_4 FALSE Y FALSE FALSE FALSE
class_5 FALSE Y FALSE FALSE FALSE
class_6 Y Y FALSE FALSE FALSE
class_7 Y Y Y FALSE Y
class_8 Y Y Y FALSE Y
class_9 Y Y Y FALSE FALSE
class_10 Y Y Y FALSE Y