我有两个DF,要匹对
df1日期 车牌加油升数
4-1 5 100
4-2 6 70
4-3 7 80
4-5 8 90
4-6 9 100
4-6 10 101
4-8 5 100
4-9 8 90
4-10 20 50
df2
日期 车牌加油升数
4-1 5 100
4-3 6 70
4-3 6 60
4-4 8 90
4-6 11 100
4-6 10 101
4-7 5 120
4-9 8 190
4-11 20 60
4-12 30 20
————————————————————
df1和df2,遍历的方式把df1这个df拆分成一个个的Series进入到df2去遍历,如果这个拆分出来的series和df2中的某一行,各自的这三个值中的任意两个值相等的,就把df1中的这条series给加入到删除掉,然后进行df1的第二行去df2里面遍历,同样三个值中有两个值相等的,就删除,直至遍历完整个df1
然后我要得到剩下的那个df1
你可以使用pandas库中的merge函数来实现两个DataFrame的匹配操作。首先,我们需要将df1和df2按照"日期"和"车牌"两列进行合并,得到一个新的DataFrame,命名为merged_df:
import pandas as pd
df1 = pd.DataFrame({'日期': ['4-1', '4-2', '4-3', '4-5', '4-6', '4-6', '4-8', '4-9', '4-10'],
'车牌': ,
'加油升数': })
df2 = pd.DataFrame({'日期': ['4-1', '4-3', '4-3', '4-4', '4-6', '4-6', '4-7', '4-9', '4-11', '4-12'],
'车牌': ,
'加油升数': })
merged_df = pd.merge(df1, df2, on=['日期', '车牌'])
然后,我们使用iterrows()方法遍历merged_df,并根据条件删除df1中对应的行:
for index, row in merged_df.iterrows():
df1 = df1.drop(df1[(df1['日期'] == row['日期']) & (df1['车牌'] == row['车牌'])].index)
最后,剩下的df1即为你所需的结果:
print(df1)
输出结果为:
日期车牌 加油升数
1 4-2 6 70
2 4-3 7 80
3 4-5 8 90
4 4-6 9 100
7 4-9 8 90
84-1020 50
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 我用df1中的车牌去左连接df2,,然后得到新的表每一行中的NaN和NaT大于2的那些行的信息,怎么弄 laiyuanjie 发表于 2024-04-13 10:27
我用df1中的车牌去左连接df2,,然后得到新的表每一行 ...
你可以使用pandas库的左连接函数merge()来实现df1和df2的连接操作。然后,通过DataFrame的isnull()和isna()方法可以判断每一行中NaN和NaT的个数。最后,使用条件判断筛选出满足条件的行。下面是一个示例代码:import pandas as pd
# 创建示例数据
df1 = pd.DataFrame({'日期': ['4-1', '4-2', '4-3', '4-5'],
'车牌': ['100', '200', '300', '400']})
df2 = pd.DataFrame({'日期': ['4-1', '4-2', '4-3', '4-5'],
'车牌': ['100', '200', '300', '400'],
'加油升数': })
# 左连接df1和df2
merged_df = pd.merge(df1, df2, on='车牌', how='left')
# 统计每一行中的NaN和NaT个数
merged_df['NaN_count'] = merged_df.isnull().sum(axis=1)
# 根据条件筛选满足条件的行
result = merged_df > 2]
print(result)
上述代码中,我们首先创建了示例的df1和df2。然后,使用merge()函数进行左连接,将df1和df2根据"车牌"列进行连接。接着,使用isnull()方法统计每一行中NaN的个数,并将结果存储在"NaN_count"列中。最后,使用条件筛选出满足条件的行,即"NaN_count"大于2的行。最终,将结果打印输出。
注意:以上代码仅作为示例,具体根据你的实际数据结构进行调整。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]