Join 将具有层次索引的熊猫系列连接回源数据帧
我试着把我的大脑包围在熊猫数据结构上,试着愤怒地使用它们。我发现groupby操作会产生一个pandas系列对象。但我不太明白如何使用生成的序列。我特别想做两件事: 1将结果连接回初始数据帧 2根据层次索引从结果系列中选择特定值 下面是一个玩具示例:Join 将具有层次索引的熊猫系列连接回源数据帧,join,group-by,pandas,ipython,dataframe,Join,Group By,Pandas,Ipython,Dataframe,我试着把我的大脑包围在熊猫数据结构上,试着愤怒地使用它们。我发现groupby操作会产生一个pandas系列对象。但我不太明白如何使用生成的序列。我特别想做两件事: 1将结果连接回初始数据帧 2根据层次索引从结果系列中选择特定值 下面是一个玩具示例: import pandas df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'], 'group2': ['c','c','d','d',
import pandas
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
'group2': ['c','c','d','d','d','e'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
dfGrouped = df.groupby( ["group1", "group2"] , sort=True)
## toy function, obviously not my real function
def fun(x): return mean(x**2)
results = dfGrouped.apply(lambda x: fun(x.value1))
因此,生成的系列结果如下所示:
group1 group2
a c 2.605
d 9.000
b d 20.500
e 36.000
这是有道理的。但我如何:
1将其连接回原始数据帧df
2选择一个值,比如说,group1=='b'&group2=='d',当我胡闹时,我发现了2的答案: 结果[b,d]给了我一个值,其中group1='b'&group2=='d'
In [9]: df
Out[9]:
group1 group2 value1 value2
0 a c 1.1 7.1
1 a c 2.0 8.0
2 a d 3.0 9.0
3 b d 4.0 10.0
4 b d 5.0 11.0
5 b e 6.0 12.0
In [10]: results
Out[10]:
group1 group2
a c 2.605
d 9.000
b d 20.500
e 36.000
In [11]: df.set_index(['group1', 'group2'], inplace=True)['results'] = results
In [12]: df
Out[12]:
value1 value2 results
group1 group2
a c 1.1 7.1 2.605
c 2.0 8.0 2.605
d 3.0 9.0 9.000
b d 4.0 10.0 20.500
d 5.0 11.0 20.500
e 6.0 12.0 36.000
In [13]: df.reset_index()
Out[13]:
group1 group2 value1 value2 results
0 a c 1.1 7.1 2.605
1 a c 2.0 8.0 2.605
2 a d 3.0 9.0 9.000
3 b d 4.0 10.0 20.500
4 b d 5.0 11.0 20.500
5 b e 6.0 12.0 36.000
看起来正是我想做的。这是如何设置索引的一个很好的示例。我不知道这是怎么回事。@wouter overmeire-非常好。我今天一直在努力解决这个问题。@wouter overmeire,@jd long-如果必须将多个结果添加回数据帧,这个问题将如何解决。例如,如何将两个单独函数的结果(例如def UCLx:return meanx2+np.std*2和def LCLx:return meanx2 np.std*2)传递回df?或者有更好的方法吗?可以使用transform和agg。