Multiindex Pandas Dataframe中的多重赋值[重复]
Posted
技术标签:
【中文标题】Multiindex Pandas Dataframe中的多重赋值[重复]【英文标题】:Multiple Assignment in Multindex Pandas Dataframe [duplicate] 【发布时间】:2019-02-14 02:43:30 【问题描述】:假设我有一个像下面这样的多索引数据框
In [221]: df
Out[221]:
first bar baz
second one two one two
A -1.089798 2.053026 0.470218 1.440740
B 0.488875 0.428836 1.413451 -0.683677
C -0.243064 -0.069446 -0.911166 0.47837
我想为每个第一级列“bar”和“baz”添加第三列和第四列。
我一直在尝试使用:
df[['bar','baz'],['third','forth']]=prices_df.apply(
lambda row: pd.Series(get_bond_metrics(row))
, axis=1)
但这不是在多索引数据帧中进行多个分配的正确方法。
谢谢
【问题讨论】:
【参考方案1】:一种方法是通过pd.concat
,将现有数据框与所需列的新数据框连接起来(由MultiIndex.from_product
创建,它给出两个列表的组合)和您的值,即
df
first bar baz
second one two one two
0 -0.122485 0.943154 1.253930 -0.955231
1 -0.293157 -1.167648 -0.864481 1.251452
values = np.random.randn(2,4) # here goes your values
df2 = pd.DataFrame(values, columns=pd.MultiIndex.from_product([['bar','baz'],['third','forth']]))
# Column wise concatenation followed by sorting of index for better view
ndf = pd.concat([df,df2],axis = 1).sort_index(level='first',axis=1,sort_remaining=False)
输出:
first bar baz \
second one two third forth one two third
0 -0.122485 0.943154 -0.419076 0.667690 1.253930 -0.955231 -0.858656
1 -0.293157 -1.167648 0.516346 -0.907558 -0.864481 1.251452 0.429894
first
second forth
0 0.237544
1 -0.521049
【讨论】:
我喜欢你的回答,但我希望新值成为数据框旧列的函数。有没有办法做到这一点?谢谢。以上是关于Multiindex Pandas Dataframe中的多重赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章