000*_*004 3 python join pandas
我试图从一个电子表格(df name = data2)中引用过期订单列表,并在新订单电子表格(df name = data)上查找它们以删除包含过期订单的所有行。然后返回一个新的电子表格(df name = results)。
我在尝试模仿我在 Pandas 中的 excel vloookup/sort/delete 中所做的事情时遇到了麻烦。请查看伪代码/步骤为代码:
执行 vlookup ,使用“数据”中的“A”列作为要与“data2”的“A”列中的任何相同值匹配的值(两者都只有订单 ID)
对于存在于 'data2' 中的 A 列内且也存在于 'data' 的“A”列中的所有值,分组(如有必要)并为列中找到的每个匹配的订单 ID 删除整行(有 26 列)两个数据集的 A。重申一下,删除“数据”文件中找到的匹配项的整行。将较小的数据集保存为结果。
import pandas as pd
data = pd.read_excel("ors_simple.xlsx", encoding = "ISO-8859-1",
dtype=object)
data2 = pd.read_excel("wos.xlsm", sheet_name = "T")
results = data.merge(data2,on='Work_Order')
writer = pd.ExcelWriter('vlookuped.xlsx', engine='xlsxwriter')
results.to_excel(writer, sheet_name='Sheet1')
writer.save()
Run Code Online (Sandbox Code Playgroud)
我重新阅读了您的问题,并认为我理解正确。您想知道new_orders(您称之为data)中的任何订单是否已使用expired_orders(您称之为data2)过期。
如果您重新表述您的问题,您想要做的是:1)找出 a 中列中的值DataFrame是否在另一列中DataFrame,然后 2)删除两个.
使用pd.merge是一种方法。但既然你想用过expired_orders滤器new_orders,pd.merge似乎有点矫枉过正。
Pandas 实际上有一种方法可以做这种事情,它被调用,isin()所以让我们使用它!此方法允许您检查一个中的值是否column存在于另一个中column。
df_1['column_name'].isin(df_2['column_name'])
Run Code Online (Sandbox Code Playgroud)
isin()返回Series真/假值,你可以申请通过把其作为掩模来过滤数据帧:df[bool_mask]。
那么你如何在你的情况下使用它?
is_expired = new_orders['order_column'].isin(expired_orders['order_column'])
results = new_orders[~is_expired].copy() # Use copy to avoid SettingWithCopyError.
Run Code Online (Sandbox Code Playgroud)
~等于 not - 所以~is_expired意味着订单没有过期。
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |