我有两个 Dataframe 。我想用条件“〉”和/或“〈”过滤第一个 Dataframe 。条件应为:
if df1.Type=df2.Parameters:
dfFinal= df1.Amount > df2.Amount & df1.Count < df2.Count
结果将是dfTotal,即df 1中满足c2个条件的所有 Dataframe 。
df1 = pd.DataFrame({'Type': ['car', 'bike','car', 'motorbike','bike','bike'], 'Amount': [40,3,50, 699,60,90], 'Count': [10,1,2,4,3,2],'Item': ['a','b','t','u','i','e']})
df2 = pd.DataFrame({'Parameters': ['Amount', 'Count'], 'car': [30, 3], 'bike': [40,4], 'motorbike': [1000,7]})
只有df 1的行满足df 2的值目标的条件的最终 Dataframe :
dfTotal = pd.DataFrame({'Type': ['car','bike','bike'], 'Amount': [50,60,90], 'Count': [2,3,2], 'Item': ['t','i','e']})
我已经提出了一个问题,但目的不同。
1条答案
按热度按时间fdx2calv1#
解决此问题的一种方法是将DataFrame合并为一个,然后对目标行的结果运行查询。
假设您的数据如前所述,首先我们需要修改df 2,以便能够通过转置和格式化列来与df 1合并。
这应该给予我们:
| | 类型|数量_比较|计数_比较|
| - ------|- ------|- ------|- ------|
| 无|汽车|三十|三个|
| 1个|脚踏车|四十|四个|
| 第二章|摩托车|一千|七|
然后,我们可以使用以下命令merge()Type 列中的两个值:
它将重复我们对每种类型的比较值。
| | 类型|金额|计数|项目|数量_比较|计数_比较|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 无|汽车|四十|十个|项目a|三十|三个|
| 1个|汽车|五十|第二章|t|三十|三个|
| 第二章|脚踏车|三个|1个|B|四十|四个|
| 三个|脚踏车|六十|三个|我|四十|四个|
| 四个|脚踏车|九十|第二章|电子|四十|四个|
| 五个|摩托车|六九九|四个|乌|一千|七|
现在我们可以使用query()过滤数据
这将(大部分)给予我们想要的结果:
| | 类型|金额|计数|项目|数量_比较|计数_比较|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 1个|汽车|五十|第二章|t|三十|三个|
| 三个|脚踏车|六十|三个|我|四十|四个|
| 四个|脚踏车|九十|第二章|电子|四十|四个|
获得示例
dfTotal
DataFrame所需的唯一额外步骤是删除比较列。| | 类型|金额|计数|项目|
| - ------|- ------|- ------|- ------|- ------|
| 1个|汽车|五十|第二章|t|
| 三个|脚踏车|六十|三个|我|
| 四个|脚踏车|九十|第二章|电子|