首页 > 解决方案 > 从一系列键和一个键:值数据帧构造数据帧

问题描述

我有一个熊猫系列的键,想通过从其他数据框中选择值来创建一个数据框。

例如。

data_df = pandas.DataFrame({'key' : ['a','b','c','d','e','f'],
                       'value1': [1.1,2,3,4,5,6],
                       'value2': [7.1,8,9,10,11,12]
})
keys = pandas.Series(['a','b','a','c','e','f','a','b','c'])

data_df
#   key value1  value2
#0  a   1.1     7.1
#1  b   2.0     8.0
#2  c   3.0     9.0
#3  d   4.0     10.0
#4  e   5.0     11.0
#5  f   6.0     12.0

我想得到这样的结果

result
    key value1  value2
0   a   1.1     7.1
1   b   2.0     8.0
2   a   1.1     7.1
3   c   3.0     9.0
4   e   5.0     11.0
5   f   6.0     12.0
6   a   1.1     7.1
7   b   2.0     8.0
8   c   3.0     9.0

我成功做到这一点的一种方法是使用

def append_to_series(key):
    new_series=data_df[data_df['key']==key].iloc[0]
    return new_series
pd.DataFrame(key_df.apply(append_to_series))

但是,此功能非常缓慢且不干净。有没有办法更有效地做到这一点?

标签: pythonpandasdataframe

解决方案


按列创建索引key,然后使用DataFrame.reindexor DataFrame.loc

注意key:原始列的必要唯一值。

df = data_df.set_index('key').reindex(keys.rename('key')).reset_index()

或者:

df = data_df.set_index('key').loc[keys].reset_index()

print (df)
  key  value1  value2
0   a     1.1     7.1
1   b     2.0     8.0
2   a     1.1     7.1
3   c     3.0     9.0
4   e     5.0    11.0
5   f     6.0    12.0
6   a     1.1     7.1
7   b     2.0     8.0
8   c     3.0     9.0

推荐阅读