现在,我有两个熊猫数据帧
规则是:
当两个数据帧的“否”相同时,
只需将“pass”结果记录获取到df1数据帧
当两个数据帧的“否”不同时, 根据数字大小将df2的数据帧合并到df1中
数据帧1和2的格式如下:
====df1====
no result
0 12 pass
1 13 fail
2 15 pass
3 16 pass
4 17 fail
====df2====
no result
0 13 pass
1 14 fail
预期的答案是:
====df1-merge====
no result
0 12 pass
1 13 pass
2 14 fail
3 15 pass
4 16 pass
5 17 fail
但在执行代码后,结果如下,如何将代码修复为与上述预期答案相同的结果? 谢谢
====df1-merge====
no result
0 12 pass
1 13 pass
2 15 pass
3 16 pass
4 17 fail
我的代码如下:
import pandas as pd
import numpy as np
lst11 = [12,13,15,16,17]
lst12 = ["pass","fail","pass","pass","fail"]
df1 = pd.DataFrame(list(zip(lst11,lst12)), columns = ['no','result'])
lst21 = [13,14]
lst22 = ["pass","fail"]
df2 = pd.DataFrame(list(zip(lst21,lst22)), columns = ['no','result'])
print("====df1====")
print(df1)
print("====df2====")
print(df2)
for i in range(len(df1) - 1):
no1 = df1.at[i, "no"]
for x in range(len(df2)):
no2 = df2.at[x, "no"]
if no1 == no2:
result_no1 = df1.at[i,'result']
result_no2 = df2.at[x,'result']
#==============================
if result_no1 == "pass":
result_no1_str = 1
else:
result_no1_str = 0
if result_no2 == "pass":
result_no2_str = 1
else:
result_no2_str = 0
#==============================
result_all = result_no1_str or result_no2_str
#==============================
if result_all == 1:
result_all = "pass"
else:
result_all = "fail"
df1.at[i, "result"] = result_all
else:
if no1 < no2:
if i == len(df1) - 1:
no = df2.at[x,'no']
result = df2.at[x,'result']
df1.loc[len(df1.index)] = [no, result]
else:
pass
else:
if i == len(df1) - 1:
no = df2.at[i,'no']
result = df2.at[i,'result']
df1.loc[i+1] = pd.Series({"no": no,"Result": result})
else:
pass
print("\n====df1-merge====")
print(df1)
添加“N/A”结果类型后的新编辑
如果结果类型为“N/A”,而不仅仅是“通过”和“失败”。。。 规则是:
当两个数据帧的“否”相同时, 只需将“pass”结果记录获取到df1数据帧
但如果其中一个结果为“不适用”,则首先选择“通过”,然后选择“失败”, 如果两个结果均为“不适用”,则选择“不适用”
当两个数据帧的“否”不同时, 根据数字大小将df2的数据帧合并到df1中
The both of dataframe 1 and 2 is below:
====df1====
no result
0 12 pass
1 13 fail
2 15 pass
3 16 N/A
4 17 N/A
5 18 pass
====df2====
no result
0 13 pass
1 14 fail
2 15 N/A
3 16 N/A
4 17 fail
预期的答案是:
====df1-merge====
no result
0 12 pass
1 13 pass
2 14 fail
3 15 pass
4 16 N/A
5 17 fail
6 18 pass
注意:这里我重置了结果数据帧的索引,以避免重复索引
EDIT:要使用NA值,将no列设置为数据帧的索引要简单得多(即,通过如下方式创建数据帧:
df1 = pd.DataFrame(data=lst12, index=lst11, columns=["result"])
)然后,当两个数据帧中的值都不是na时,您可以添加一个额外的条件,仅修改第一个数据帧的结果列
相关问题 更多 >
编程相关推荐