【问题标题】:Create two Dataframes based on series membership in Pandas根据 Pandas 中的系列成员资格创建两个数据框
【发布时间】:2017-03-20 11:19:13
【问题描述】:

我是初学者,我似乎找不到确切的答案。

我有两个数据框,第一个有本地化的经济数据 (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

最终,我要做的是在df2 中的州和地区之间的Diff 列上运行t-test,而不是df1 中未包含在df2 中的所有其他列。但是,我还没有设法划分组,所以我无法运行测试。

我最近的尝试(很多)如下所示:

df1['Region', 'State'].isin(df2['Region', 'State'])

我也尝试过pd.merge,但似乎无法正常工作。我认为这是因为多级索引,但我仍然不知道如何获取不在df2 中的州/地区。

【问题讨论】:

  • 你能举一个预期输出的例子吗?

标签: python-3.x pandas dataframe merge t-test


【解决方案1】:

看来你需要differenceMultiIndexes 然后通过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)

【讨论】:

  • 我不确定是否理解 - 需要将索引中设置的 'State','Region' 与另一个数据帧的列 'State','Region' 进行比较?
  • @jazrael,是的,正如您评论的那样。比较两个不同“状态”、“区域”组的“差异”值。但是,所有原始数据帧都有数百行,因此写出所有条目会很困难。而不是 ['IL', 'NY'] 一个 df1['State'] 类型的方法是可取的。谢谢
  • 我不明白,你不需要写['IL', 'NY'],看到最后编辑你只需要。
  • 抱歉,我误读了您的解释。感谢您的明确指导 - 我确实渴望学习并变得更好。引导我完成这些步骤极大地帮助了学习过程,可能比我正在回答的问题更有价值。非常感谢,我
猜你喜欢
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2017-07-05
  • 2021-02-18
相关资源
最近更新 更多