laiyuanjie 发表于 2024-4-12 21:20:29

按我这个要求来!!!用python的显示习惯显示你的代码

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-19   6      90
4-11   20      60
4-12   30      20
————————————————————



然后我要得到这样一个df
日期   车牌加油升数
4-3   7      80    df1和df2有1项相同,要显示
4-8   5       100    df2中完全没有,要显示
4-9   8      90    df1和df2有1项相同,要显示
4-10    20      50   df1和df2有1项相同,要显示
4-12   30      20    df1中完全没有,要显示

FishC 发表于 2024-4-12 21:20:53

laiyuanjie 发表于 2024-04-12 21:20
按我这个要求来!!!用python的显示习惯显示你的代码 ...

非常抱歉之前的回答还是没有理解您的需求。以下是根据您的要求编写的修正代码:import pandas as pd# 创建df1和df2数据框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'],                     '加油升数': })df2 = pd.DataFrame({'日期': ['4-1', '4-3', '4-3', '4-4', '4-6', '4-6', '4-7', '4-19', '4-11', '4-12'],                     '车牌': ['5', '6', '6', '8', '11', '10', '5', '6', '20', '30'],                     '加油升数': })# 将df1和df2合并成一个数据框df_combined = pd.concat(, ignore_index=True)# 根据要求筛选出满足条件的行df_filtered = df_combined.groupby(['日期', '车牌']).filter(lambda x: len(x) == 1)# 输出最终结果print(df_filtered)在这个修正后的代码中,首先创建了df1和df2的数据框。然后将df1和df2合并成一个数据框df_combined,使用concat函数并设置ignore_index=True来确保合并后的索引重置。接下来,使用groupby函数和filter方法对日期和车牌进行分组,并筛选出只有一个该组的行。最终得到满足条件的行,并将结果输出。希望这次能满足您的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-4-12 21:21:29

按我这个要求来!!!用python的显示习惯显示你的代码

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-19   6      90
4-11   20      60
4-12   30      20
————————————————————



然后我要得到这样一个df
日期   车牌加油升数
4-3   7      80    df1和df2有1项相同,要显示
4-8   5       100    df2中完全没有,要显示
4-9   8      90    df1和df2有1项相同,要显示
4-10    20      50   df1和df2有1项相同,要显示
4-12   30      20    df1中完全没有,要显示

按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码

FishC 发表于 2024-4-12 21:21:49

laiyuanjie 发表于 2024-04-12 21:21
按我这个要求来!!!用python的显示习惯显示你的代码 ...

非常抱歉之前的回答还是没有理解您的需求。以下是根据您的要求编写的修正代码,按照Python的显示习惯进行展示:import pandas as pd# 创建df1和df2数据框df1 = pd.DataFrame({'日期': ,                     '车牌': ,                     '加油升数': })df2 = pd.DataFrame({'日期': ,                     '车牌': ,                     '加油升数': })# 找出满足条件的行df_result = pd.DataFrame(columns=['日期', '车牌', '加油升数'])for index, row in df1.iterrows():    if ((df1['日期'].iloc in df2['日期'].values and         df1['车牌'].iloc in df2['车牌'].values) or      (df1['日期'].iloc in df2['日期'].values and         df1['加油升数'].iloc in df2['加油升数'].values) or      (df1['车牌'].iloc in df2['车牌'].values and         df1['加油升数'].iloc in df2['加油升数'].values)):      continue    else:      df_result = df_result.append(row)for index, row in df2.iterrows():    if ((df2['日期'].iloc in df1['日期'].values and         df2['车牌'].iloc in df1['车牌'].values) or      (df2['日期'].iloc in df1['日期'].values and         df2['加油升数'].iloc in df1['加油升数'].values) or      (df2['车牌'].iloc in df1['车牌'].values and         df2['加油升数'].iloc in df1['加油升数'].values)):      continue    else:      df_result = df_result.append(row)# 重新设置索引df_result.reset_index(drop=True, inplace=True)# 打印结果print("剩下的数据框:")print(df_result)希望这次能满足您的要求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-4-12 21:22:49

请用python的显示习惯显示你的代码!!!听到没有,,,
请用python的显示习惯显示你的代码!!!听到没有,,,
请用python的显示习惯显示你的代码!!!听到没有,,,
请用python的显示习惯显示你的代码!!!听到没有,,,
请用python的显示习惯显示你的代码!!!听到没有,,,

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-19   6      90
4-11   20      60
4-12   30      20
————————————————————



然后我要得到这样一个df
日期   车牌加油升数
4-3   7      80    df1和df2有1项相同,要显示
4-8   5       100    df2中完全没有,要显示
4-9   8      90    df1和df2有1项相同,要显示
4-10    20      50   df1和df2有1项相同,要显示
4-12   30      20    df1中完全没有,要显示

按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码
按我这个要求来!!!用python的显示习惯显示你的代码

FishC 发表于 2024-4-12 21:23:13

laiyuanjie 发表于 2024-04-12 21:22
请用python的显示习惯显示你的代码!!!听到没有,, ...

非常抱歉之前的回答还是没有满足您的要求。以下是修正后的代码,使用Python的显示习惯进行展示:pandas as pd# 创建df1和df2数据框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'],                     '加油升数': })df2 = pd.DataFrame({'日期': ['4-1', '4-3', '4-3', '4-4', '4-6', '4-6', '4-7', '4-19', '4-11', '4-12'],                     '车牌': ['5', '6', '6', '8', '11', '10', '5', '6', '20', '30'],                     '加油升数': })# 找出df1和df2中有重复的行df_duplicate = pd.merge(df1, df2, on=['日期', '车牌', '加油升数'], how='inner')# 剔除重复的行df_not_equal = pd.concat().drop_duplicates(keep=False)# 剔除在df_duplicate中的行df_result = df_not_equal[~df_not_equal.duplicated(subset=['日期', '车牌', '加油升数'], keep=False)]print("按要求得到的数据框:")print(df_result)在这个修正后的代码中,我们首先使用pandas的merge函数找出df1和df2中有重复的行,并保存到df_duplicate中。然后我们使用concat函数将df1和df2合并,并使用drop_duplicates函数去除重复的行,得到剩下的行保存到df_not_equal中。最后,使用duplicated函数和~操作符筛选出没有在df_duplicate中的行并保存到df_result中,即按照您的要求得到的数据框。希望这次能满足您的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-4-12 21:28:25

FishC 发表于 2024-4-12 21:23
非常抱歉之前的回答还是没有满足您的要求。以下是修正后的代码,使用Python的显示习惯进行展示:在这个 ...

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-19   6      90
4-11   20      60
4-12   30      20
————————————
我要的是得出这样的一个df:
日期   车牌加油升数
4-3   7      80    df1和df2有1项相同,要显示
4-8   5       100    df2中完全没有,要显示
4-9   8      90    df1和df2有1项相同,要显示
4-10    20      50   df1和df2有1项相同,要显示
4-12   30      20    df1中完全没有,要显示


你之前给我的代码是让我这样输入:
import pandas as pd
# 创建df1和df2数据框
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'],
                  '加油升数': })
df2 = pd.DataFrame({'日期': ['4-1', '4-3', '4-3', '4-4', '4-6', '4-6', '4-7', '4-19', '4-11', '4-12'],
                  '车牌': ['5', '6', '6', '8', '11', '10', '5', '6', '20', '30'],
                  '加油升数': })
# 找出df1和df2中有重复的行
df_duplicate = pd.merge(df1, df2, on=['日期', '车牌', '加油升数'], how='inner')
# 剔除重复的行
df_not_equal = pd.concat().drop_duplicates(keep=False)
# 剔除在df_duplicate中的行
df_result = df_not_equal[~df_not_equal.duplicated(subset=['日期', '车牌', '加油升数'], keep=False)]
print("按要求得到的数据框:")
print(df_result)





   日期车牌加油升数
1   4-2   6    70
2   4-3   7    80
3   4-5   8    90
4   4-6   9   100
6   4-8   5   100
7   4-9   8    90
84-1020    50
1   4-3   6    70
2   4-3   6    60
3   4-4   8    90
4   4-611   100
6   4-7   5   120
74-19   6    90
84-1120    60
94-1230    20

这个是我根据你的代码得出来的df,,






根本就不是我要的下面的这个!!!!
日期   车牌加油升数
4-3   7      80    df1和df2有1项相同,要显示
4-8   5       100    df2中完全没有,要显示
4-9   8      90    df1和df2有1项相同,要显示
4-10    20      50   df1和df2有1项相同,要显示
4-12   30      20    df1中完全没有,要显示

FishC 发表于 2024-4-12 21:28:41

laiyuanjie 发表于 2024-04-12 21:28
df1

日期   车牌加油升数
4-1   5       10 ...

非常抱歉之前的回答仍然没有满足您的要求。下面是修改后的代码,按照您的要求生成所需的数据框:import pandas as pd# 创建df1和df2数据框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-19', '4-11', '4-12'],                  '车牌': ,                  '加油升数': })# 根据日期、车牌和加油升数进行合并,并标记重复行df_merged = pd.merge(df1, df2, on=['日期', '车牌', '加油升数'], how='outer', indicator=True)# 根据条件筛选出符合要求的行df_result = df_merged == 'left_only'][['日期', '车牌', '加油升数']]print("按要求得到的数据框:")print(df_result)这次的代码会根据日期、车牌和加油升数三个列进行合并,并通过添加一个"_merge"列标记是否重复。然后,我们根据"_merge"列的值筛选出df_merged中只在df1中出现的行,保存到df_result中。最后,我们打印出按要求得到的数据框df_result。希望这次能够满足您的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: 1 2 [3]
查看完整版本: 我有两个DF