简短问题 在Pandas中,合并两个数据帧的最方便方法是什么,这样左数据帧中的所有条目都从右数据帧接收第一个匹配值?在
较长的问题
假设我有两个电子表格:people.csv
和{people.csv
包含有关此人的多个信息列,而orders.csv
则包含此人的全名和该人所下订单的一行。在
我需要创建第三个csv,output.csv
,它包含来自people.csv
的所有列,再加上一个来自{
people.csv
按“全名”字段排序,但包含重复行,因此在“全名”列中有多行带有“John Smith”。在orders.csv
中也有重复行,但重复行的数目不同(例如,people.csv
可能有4个John Smith条目,但是orders.csv
可能只有两个)。在
如果我使用以下代码:
people = pd.read_csv('people.csv')
orders = pd.read_csv('orders.csv')
full = pd.merge(
people,
orders,
left_on='FULL_NAME',
right_on='CUSTOMER_FULL_NAME',
)
result.to_csv("output.csv")
。。。我得到了一个CSV,其中全名字段中只有两行带有“John Smith”的订单数。正下方的行在该字段中没有值。这是因为output.csv
只包含了两行与John Smith匹配的值,而people.csv
只有4行。在
在Pandas中是否有一种方便的方法将一列的值设置为另一个数据帧中的第一个匹配列,以便所有4个条目都包含来自orders.csv
的第一个匹配值?在
编辑 脚本的完整当前版本,返回的CSV包含未设置预期值的行:
^{pr2}$所以我想我在这里遗漏了一些东西,因为有些行以预期的方式匹配。以下是输出文件中的一个示例:
ID FULL_NAME EMPLOYER DIVISION ORDER #
7350 John Smith RiteAid Clinical Research 25
7351 John Smith RiteAid Clinical Research 25
7352 John Smith Costco Sales
7353 John Smith Costco Sales
这个John Smith行在orders.csv
文件中没有重复的值,因此我认为这是可行的,因为其中两行得到了它。但是,我没有在列出好市多而不是RiteAid(或其他不同字段)的John Smith行上找到匹配项。这让我很惊讶,因为我以为索引检查只在全名字段上。在
有什么想法可以解释为什么其他行不可以填写?在
您可以使用} 与}中的所有行,例如:
merge
中的subset=['CUSTOMER_FULL_NAME']
上的^{how='left'
一起保留{因此
orders.drop_duplicates(subset=['CUSTOMER_FULL_NAME'], keep='first')
将只包含一次每个名称,并且在merge
期间,匹配将只使用这个唯一的名称相关问题 更多 >
编程相关推荐