python – Pandas将系列分配给新列到multiindex
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Pandas将系列分配给新列到multiindex,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1407字,纯文字阅读大概需要3分钟。
内容图文
所以我用MultiIndex创建了一个数据帧
df = pd.DataFrame({
'C1': ['x', 'x', 'y', 'y', 'z', 'z'],
'C2': ['a', 'b', 'a', 'b', 'a', 'b'],
'C3': [10, 11, 12, 13, 14, 15]})
df.set_index(['C1', 'C2'], inplace=True)
我得到以下数据帧
C3
C1 C2
x a 10
b 11
y a 12
b 13
z a 14
b 15
我也有一个具有相同C2索引的系列:
series = pd.Series([100], index=['a'])
我想将此系列分配给新列C4,仅分配给’x’第一个索引.如果我使用.assign它可以工作,但它返回一个副本:
df.loc['x'].assign(C4=series)
我得到了
C3 C4
C2
a 10 100.0
b 11 NaN
但我无法将其分配给原始数据
df.loc['x'] = df.loc['x'].assign(C4=series)
产量
C3
C1 C2
x a NaN
b NaN
如果我使用这样的赋值,我得到相同的结果:
df.loc['x', 'C4'] = series
但它会产生NaN.
C3 C4
C1 C2
x a NaN NaN
b NaN NaN
y a 12.0 NaN
b 13.0 NaN
z a 14.0 NaN
b 15.0 NaN
我怎样才能以这种方式分配?
解决方法:
I would like to assign this series to a new column, C4, only to the
‘x’ first index.
一种方法是从索引级别映射系列.关键方法是pd.Index.get_level_values.然后覆盖到不需要映射的NaN.
f['C4'] = df.index.get_level_values(1).map(series.get)
df.loc[df.index.get_level_values(0) != 'x', 'C4'] = np.nan
print(df)
C3 C4
C1 C2
x a 10 100.0
b 11 NaN
y a 12 NaN
b 13 NaN
z a 14 NaN
b 15 NaN
或者,您可以使用numpy.where:
df['C4'] = np.where(df.index.get_level_values(0) == 'x',
df.index.get_level_values(1).map(series.get),
np.nan)
内容总结
以上是互联网集市为您收集整理的python – Pandas将系列分配给新列到multiindex全部内容,希望文章能够帮你解决python – Pandas将系列分配给新列到multiindex所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。