从一系列键和key:value datafram

2024-04-23 15:51:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列的键,希望通过从其他数据帧中选择值来创建一个数据帧

例如

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))

但是,这个功能非常慢而且不干净。有没有更有效的方法


Tags: to数据方法keydataframepandasdfnew
2条回答

key列创建索引,然后使用^{}^{}

注意:原始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

将序列转换为列名为keydataframe

使用^{}合并value1,value2

keys = pd.DataFrame(['a','b','a','c','e','f','a','b','c'],columns=['key'])
res = pd.merge(keys,data_df,on=['key'],how='left')

print(res)
   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

相关问题 更多 >