我有两个pandas数据帧,一个是州、城市和首都标志的列表,多索引为(州、城市),另一个是州及其首都的非索引(或默认索引,如果更合适的话)列表,我需要对这两个元素执行一个内部连接,然后还要找出城市数据框中的哪些项不在连接中。你知道吗
城市:
capital
state city
Ohio Akron N
Toledo N
Columbus N
Colorado Boulder N
Denver N
国家:
state city
0 West Virginia Charleston
1 Ohio Columbus
寻找俄亥俄州首府:
pd.merge(cities, states, on=['state', 'city'], how='inner')
state city capital
0 Ohio Columbus N
现在我需要得到一个数据框,它包括除了俄亥俄州哥伦布以外的所有城市的数据框。我一直在研究.isin()
的变体,包括有reset_index()
和没有reset_index()
,但我无法让它工作。你知道吗
创建城市和州的代码。我将set_index()
作为一个单独的调用,因为如果我在创建df时尝试这样做,我会得到一个关于ValueError: Shape of passed values is (3, 3), indices imply (2, 3)
的错误,并且还没有找到解决方法。你知道吗
cities = pd.DataFrame({'state':['Ohio', 'Ohio', 'Ohio', 'Colorado', 'Colorado'], 'city':['Akron', 'Toledo', 'Columbus', 'Boulder', 'Denver'], 'capital':['N', 'N', 'N', 'N', 'N']}, columns=['state', 'city', 'capital'])
cities.set_index(('state', 'city'))
states = pd.DataFrame({'state':['West Virginia', 'Ohio'], 'city':['Charleston', 'Columbus']})
IIUC,您可以将merge与
how='outer'
和indicator='source'
一起使用,并且只保留那些'left_only'
:输出
另一种方法是使用isin,方法如下:
输出
第二种方法的思想是创建一个布尔掩码,其索引与
cities
中的索引匹配。第二种方法的变化如下:相关问题 更多 >
编程相关推荐