熊猫:使用数据框的多列作为另一个的索引

Posted

技术标签:

【中文标题】熊猫:使用数据框的多列作为另一个的索引【英文标题】:Pandas: Use multiple columns of a dataframe as index of another 【发布时间】:2014-03-17 18:10:39 【问题描述】:

我有一个包含我的数据的大型数据框,以及另一个相同第一维度的数据框,其中包含有关每个时间点的元数据(例如,它是什么试验编号,它是什么试验类型)。

我想要做的是使用“元数据帧”的值对大数据帧进行切片。我想将它们分开(而不是将元数据帧存储为较大的多索引)。

现在,我正在尝试做这样的事情:

def my_func(container):
   container.big_df.set_index(container.meta_df[['col1', 'col2']])
   container.big_df.loc['col1val', 'col2val'].plot()

但是,这会返回以下错误:

ValueError: Must pass DataFrame with boolean values only

请注意,如果我只将单个列传递给 set_index,这可以正常工作。

谁能弄清楚这里出了什么问题?或者,有人可以告诉我我正在以一种完全愚蠢和骇人听闻的方式来做这件事,并且有更好的方法来解决它吗? :)

我的解决方案

感谢您的想法。我玩了一下索引,这似乎是最简单/最快的。我不喜欢必须剥离其名称的索引,并且转置值等似乎很麻烦。我意识到了一些有趣的事情(并且可能值得轻松修复):

dfa.set_index(dfb[['col1', 'col2']]) 

没用,但是

dfa.set_index([dfb.col1, dfb.col2])

会。

因此,您基本上可以通过以下约定将 dfb 转换为列列表,从而使 set_index 起作用:

dfa.set_index([dfb[col] for col in ['col1', 'col2']])

【问题讨论】:

【参考方案1】:

使用MultiIndex.from_arrays()创建索引对象:

import pandas as pd
df1 = pd.DataFrame("A":[1,2,3], "B":["a","b","c"])
df2 = pd.DataFrame("C":[100,200,300])
df2.index = pd.MultiIndex.from_arrays(df1.values.T)

print df2

结果:

       C
1 a  100
2 b  200
3 c  300

【讨论】:

【参考方案2】:

将您的第一行更改为:

container.big_df.index=pd.MultiIndex.from_arrays(container.meta_df[['col1', 'col2']].values.T, names=['i1','i2'])

【讨论】:

【参考方案3】:

我参考this :link实现了

import pandas as pd
 
employees = pd.DataFrame(
    'EmpCode': ['Emp001', 'Emp002', 'Emp003', 'Emp004', 'Emp005'],
    'Name': ['John', 'Doe', 'William', 'Spark', 'Mark'],
    'Occupation': ['Chemist', 'Statistician', 'Statistician',
                   'Statistician', 'Programmer'],
    'Date Of Join': ['2018-01-25', '2018-01-26', '2018-01-26', '2018-02-26',
                     '2018-03-16'],
    'Age': [23, 24, 34, 29, 40])
 
print("\n --------- Before Index ----------- \n")
print(employees)
 
print("\n --------- Multiple Indexing ----------- \n")
print(employees.set_index(['Occupation', 'Age']))

之前:

tempDf1 = tempDf.set_index(['Country', 'Region','Happiness_Rank','Happiness_Score','Economy_(GDP_per_Capita)'])
tempDf1

之后:

【讨论】:

以上是关于熊猫:使用数据框的多列作为另一个的索引的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框的索引目前是两列的“分组依据”,但我希望它们作为自己的列,并带有标准数字索引

如何将一个熊猫数据框的一列与另一个数据框的每一列相加?

来自另一个数据框的熊猫多索引分配

如何将多索引列转换为熊猫数据框的单索引列?

熊猫:按另一个数据框的值添加列

熊猫:将汇率查询乘以另一个数据框的相同日期后,按每日金额求和和汇总