作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试加入两个 pandas 数据框;左边的有一个多索引,右边的只是一个普通的数据框。我想将右侧数据帧的索引加入到左侧数据帧的某一级别上。例如,如果我们有以下示例:
Age
Boys
Sam 21
John 22
Girls
Lisa 23
和
Points
John 1
Lisa 2
Sam 3
我想以这样的方式结束:
Age Points
Boys
Sam 21 3
John 22 1
Girls
Lisa 23 2
我的解决方法如下,我只是想知道是否有更直接的方法
In[2]: import pandas as pd
In[3]: idx = pd.MultiIndex(levels=[['Boys', 'Girls', ''],['Sam', 'John', 'Lisa', '']], labels=[[0,2,2,1,2],[3,0,1,3,2]])
df1 = pd.DataFrame({'Age':['',21,22,'',23]}, index=idx)
df2 = pd.DataFrame({'Points':[1, 2, 3]}, index=['John','Lisa','Sam'])
In[4]: df1
Out[4]:
Age
Boys
Sam 21
John 22
Girls
Lisa 23
In[5]: df2
Out[5]:
Points
John 1
Lisa 2
Sam 3
然后我编写了这个循环,通过给它一个多索引和适当重新排列的值来“转换”正确的数据帧
lvl = df1.index.levels[1]
lbl = df1.index.labels[1]
y = df2.iloc[:,0].values.tolist()
z=[]
for x in [lvl[k] for k in lbl]:
try:
idx = df2.index.tolist().index(x)
except ValueError as e:
z.append('')
else:
z.append(y[idx])
temp=pd.DataFrame(index=df1.index)
temp['Points'] = z
我现在可以加入他们
out = df1.join(temp)
out
Out[6]:
Age Points
Boys
Sam 21 3
John 22 1
Girls
Lisa 23 2
最佳答案
为您的索引命名 - 它将帮助 Pandas 了解如何加入您的数据框:
In [72]: df1
Out[72]:
Age
sex name
Boys
Sam 21
John 22
Girls
Lisa 23
In [73]: df1.index.names=['sex','name']
In [74]: df2.index.name = 'name'
现在加入变得非常容易:
In [75]: df1.join(df2)
Out[75]:
Age Points
sex name
Boys NaN
Sam 21 3
John 22 1
Girls NaN
Lisa 23 2
PS NaN - 是空行的结果
关于python - 连接/合并两个 Pandas 数据框。将一个的级别与另一个的索引相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36283029/
现在我正在尝试实现 flash programming specification对于 PIC32MX。我正在使用 PIC32MX512L 和 PIC32MX512H。 PIC32MX512L最终必须
我是一名优秀的程序员,十分优秀!