pandas 如何按列从一个 Dataframe 广播Map到另一个 Dataframe ?

pn9klfpd  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(179)

我想广播或扩展一个 Dataframe 列从一个较小的集合索引到一个较大的集合索引基于Map规范。我有以下的例子,请接受小错误,因为这是未经测试的

import pandas as pd

# my broadcasting mapper spec
mapper = pd.Series(data=['a', 'b', 'c'], index=[1, 2, 2])

# my data
df = pd.DataFrame(data={1: [3, 4], 2: [5, 6]})
print(df)
#    1  2
# --------
# 0  3  5 
# 1  4  6

# and I would like to get 
df2 = ...
print(df2)
#    a  b  c 
# -----------
# 0  3  5  5 
# 1  4  6  6

简单地Map列将不起作用,因为存在重复项,我希望扩展为mapper中定义的新值:

# this will of course not work => raises InvalidIndexError
df.columns = df.columns.as_series().map(mapper)

一个天真的方法只是重复规范...

df2 = pd.DataFrame(index=df.index)
for i, v in df.iteritems():
    df2[v] = df[i]
fruv7luv

fruv7luv1#

使用reindexset_axis

out = df.reindex(columns=mapper.index).set_axis(mapper, axis=1)

输出:

a  b  c
0  3  5  5
1  4  6  6
z18hc3ub

z18hc3ub2#

您可以使用pd.concat + df.get

pd.concat({v:df.get(k) for k,v in mapper.items()},axis=1)
a  b  c
0  3  5  5
1  4  6  6

相关问题