根据 Pandas 中的系列成员资格创建两个 Dataframes
Create two Dataframes based on series membership in Pandas
我是初学者,我似乎找不到确切的答案。
我有两个数据框,第一个有本地化的经济数据(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
最终我想做的是 运行 在 Diff
列中的 df2
州和地区之间的 t-test
与 df2
中的所有其他地区df1
未包含在 df2
中。不过我还没分好组所以没法运行测试
我最近的(多次)尝试是这样的:
df1['Region', 'State'].isin(df2['Region', 'State'])
我也试过 pd.merge
但似乎无法正常工作。我认为这是因为多级索引,但我仍然不知道如何获得不在 df2
.
中的 state/regions
看来您需要 MultiIndexes
的 difference
,然后 loc
:
select
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)
我是初学者,我似乎找不到确切的答案。
我有两个数据框,第一个有本地化的经济数据(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
最终我想做的是 运行 在 Diff
列中的 df2
州和地区之间的 t-test
与 df2
中的所有其他地区df1
未包含在 df2
中。不过我还没分好组所以没法运行测试
我最近的(多次)尝试是这样的:
df1['Region', 'State'].isin(df2['Region', 'State'])
我也试过 pd.merge
但似乎无法正常工作。我认为这是因为多级索引,但我仍然不知道如何获得不在 df2
.
看来您需要 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)