laiyuanjie 发表于 2024-4-13 09:35:34

我有两个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

FishC 发表于 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'],
                  '车牌': ,
                  '加油升数': })

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 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-4-13 10:27:48

我用df1中的车牌去左连接df2,,然后得到新的表每一行中的NaN和NaT大于2的那些行的信息,怎么弄

FishC 发表于 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'],
                  '加油升数': })

# 左连接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]
查看完整版本: 我有两个DF,要匹对