如果这是一个重复,我是一个新手并道歉,我似乎无法准确回答所以我认为不是。
我有两个数据帧,第一个有本地化的经济数据(df1):
(index) (index) 2000 2010 Diff
State Region
NY NYC 1000 1100 100
NY Upstate 200 270 70
NY Long_Island 1700 1800 100
IL Chicago 300 500 200
IL South 50 35 15
IL Suburbs 800 650 -150
第二个包含州和地区列表,(df2):
index State Region
0 NY NYC
1 NY Long_Island
2 IL Chicago
最终,我要做的是在t-test
中的州与地区之间的Diff
列与df2
中的所有其他列之间运行df1
不包含在df2
中。但是,我还没有设法分组,所以我无法进行测试。
我的最新尝试(很多)看起来像这样:
df1['Region', 'State'].isin(df2['Region', 'State'])
我也试过了pd.merge
,但似乎无法让它发挥作用。我认为这是因为多级索引,但我仍然不知道如何获得不在df2
中的州/区域。
先谢谢你的帮助,
我
答案 0 :(得分:1)
您似乎需要MultiIndexes
difference
,然后按loc
选择:
print (df1.index)
MultiIndex(levels=[['IL', 'NY'], ['Chicago', 'Long_Island',
'NYC', 'South', 'Suburbs', 'Upstate']],
labels=[[1, 1, 1, 0, 0, 0], [2, 5, 1, 0, 3, 4]],
names=['State', 'Region'])
print (df2.index)
Int64Index([0, 1, 2], dtype='int64', name='index')
print (df1.index.names)
['State', 'Region']
#create index from both columns
df2 = df2.set_index(df1.index.names)
what is same as
#df2 = df2.set_index(['State','Region'])
mux = df1.index.difference(df2.index)
print (mux)
MultiIndex(levels=[['IL', 'NY'], ['South', 'Suburbs', 'Upstate']],
labels=[[0, 0, 1], [0, 1, 2]],
names=['State', 'Region'],
sortorder=0)
print (df1.loc[mux])
2000 2010 Diff
State Region
IL South 50 35 15
Suburbs 800 650 -150
NY Upstate 200 270 70
所有在一起:
df2 = df2.set_index(df1.index.names)
df = df1.loc[df1.index.difference(df2.index)]
print (df)