鱼C论坛

 找回密码
 立即注册
查看: 357|回复: 3

我有两个DF,要匹对

[复制链接]
发表于 2024-4-13 09:35:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-13 09:35:51 | 显示全部楼层
你可以使用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'],
                    '车牌': [5, 6, 7, 8, 9, 10, 5, 8, 20],
                    '加油升数': [100, 70, 80, 90, 100, 101, 100, 90, 50]})

df2 = pd.DataFrame({'日期': ['4-1', '4-3', '4-3', '4-4', '4-6', '4-6', '4-7', '4-9', '4-11', '4-12'],
                    '车牌': [5, 6, 6, 8, 11, 10, 5, 8, 20, 30],
                    '加油升数': [100, 70, 60, 90, 100, 101, 120, 190, 60, 20]})

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
8  4-10  20     50

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 10:27:48 | 显示全部楼层
我用df1中的车牌去左连接df2,,然后得到新的表每一行中的NaN和NaT大于2的那些行的信息,怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 10:28:00 | 显示全部楼层
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'],
                    '加油升数': [10, 20, 30, 40]})

# 左连接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[merged_df['NaN_count'] > 2]

print(result)

上述代码中,我们首先创建了示例的df1和df2。然后,使用merge()函数进行左连接,将df1和df2根据"车牌"列进行连接。接着,使用isnull()方法统计每一行中NaN的个数,并将结果存储在"NaN_count"列中。最后,使用条件筛选出满足条件的行,即"NaN_count"大于2的行。最终,将结果打印输出。

注意:以上代码仅作为示例,具体根据你的实际数据结构进行调整。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 14:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表