pandas 如何将与df index具有相同键的字典连接为具有字典中的值的新列

xu3bshqb  于 2023-02-11  发布在  其他
关注(0)|答案(2)|浏览(128)

我有以下数据:
具有key: value结构tuple(str, str,): list[float]的字典dict

{
    ('A', 'B'): [0, 1, 2, 3],
    ('A', 'C'): [4, 5, 6, 7],
    ('A', 'D'): [8, 9, 10, 11],
    ('B', 'A'): [12, 13, 14, 15]
}

以及具有与字典中的键相对应的2列索引的panda Dataframe df

df.set_index("first", "second"]).sort_index()
print(df.head(4))
==============================================
                                        tokens
first           second  
 A              B                          166  
                C                          128  
                D                          160  
 B              A                          475

我想在df中创建一个新列numbers,其值来自dict,其键对应于df中的索引行。

print(df.head(4))
========================================================================
                                        tokens          numbers
first           second  
 A              B                          166          [0, 1, 2, 3]
                C                          128          [4, 5, 6, 7]  
                D                          160          [8, 9, 10, 11]  
 B              A                          475          [12, 13, 14, 15]

实现此目标的最佳方法是什么?请记住性能,因为此 Dataframe 可能有10 - 100k行长

6tdlim6h

6tdlim6h1#

您可以从dict创建一个系列,然后分配:

df['numbers'] = pd.Series(d)

或Map索引:

df['numbers'] = df.index.map(d)

输出:

tokens           numbers
first second                          
A     B          166      [0, 1, 2, 3]
      C          128      [4, 5, 6, 7]
      D          160    [8, 9, 10, 11]
B     A          475  [12, 13, 14, 15]
cld4siwp

cld4siwp2#

创建一个系列,然后将其与 Dataframe 连接:

sr = pd.Series(d, name='numbers')
out = pd.concat([df, sr], axis=1)
print(out)

# Output
     tokens           numbers
A B     166      [0, 1, 2, 3]
  C     128      [4, 5, 6, 7]
  D     160    [8, 9, 10, 11]
B A     475  [12, 13, 14, 15]

相关问题