【问题标题】:Update pandas df from dict从 dict 更新 pandas df
【发布时间】:2019-01-30 18:23:45
【问题描述】:

我想从 dict 'counts' 中的值:

counts:
Counter({u'Apple': 1638, u'Facebook': 1169, u'Amazon': 1027, u'Boeing': 548, u'Microsoft': 437, u'JPMorgan': 435, u'Nasdaq': 364, u'Williams': 296, u'Disney': 270, u'Netflix': 260, u'Chevron': 258, u'Comcast': 213, u'CBS': 200, u'Carnival': 193, u'Intel': 188, u'IBM': 172, u'Starbucks': 165, u'Target': 143, u'Monsanto': 141, u'PayPal': 133, u'Viacom': 126, u'Equifax': 124, u'Anthem': 123, u'Pfizer': 121, u'Nike': 121, u'Caterpillar': 119, u'Citigroup': 116, u'AIG': 116, u'HP': 109, u'Aetna': 109, u'BlackRock': 109 ...

co_names_df_1:
         Name          Frequency
0        3M            0
1        A.O. Smith    0
2        Abbott        0
3        AbbVie        0
4        Accenture     0
5        Activision    0
6        Acuity Brands 0 ...

【问题讨论】:

  • 使用 update ,将 Counter 转换为数据框

标签: python pandas dictionary


【解决方案1】:

以下内容遍历counts 中的键,并将数据帧co_names_df_1 中的Frequency 值设置为与counts 中的该键关联的值。

from collections import Counter

counts = Counter({u'Apple': 1638, u'Facebook': 1169, u'Amazon': 1027, u'Boeing': 548,})

for x in counts:
    co_names_df_1['Frequency'][co_names_df_1['Name']==x] = counts[x]  # updates dataframe values based on those in counts

更新:

如下使用 pandas 的 .map() 方法似乎比上面的 for 循环运行得更快(至少在这个包含 4 个键:值对的小样本集上)。

co_names_df_1['Frequency'] = co_names_df_1['Name'].map(counts)

在 jupyter 笔记本单元格中使用 %%time.map() 方法的运行时间约为 488 µs,而 for 循环方法的运行时间约为 1.24 秒

【讨论】:

  • 请添加一些cmets来解释你的答案。
  • 查看最后一行的内联注释;如果在较小的屏幕上查看,您可能需要向右滚动。
【解决方案2】:

你可以使用Series.map:

import collections
import pandas as pd
c = collections.Counter({u'Apple': 1638, u'Facebook': 1169, u'Amazon': 1027, u'Boeing': 548, u'Microsoft': 437, u'JPMorgan': 435, u'Nasdaq': 364, u'Williams': 296, u'Disney': 270, u'Netflix': 260, u'Chevron': 258, u'Comcast': 213, u'CBS': 200, u'Carnival': 193, u'Intel': 188,
                         u'IBM': 172, u'Starbucks': 165, u'Target': 143, u'Monsanto': 141, u'PayPal': 133, u'Viacom': 126, u'Equifax': 124, u'Anthem': 123, u'Pfizer': 121, u'Nike': 121, u'Caterpillar': 119, u'Citigroup': 116, u'AIG': 116, u'HP': 109, u'Aetna': 109, u'BlackRock': 109})
df = pd.DataFrame({'Name': {0: '3M',
                            1: 'A.O. Smith',
                            2: 'Abbott',
                            3: 'AbbVie',
                            4: 'Accenture',
                            5: 'Activision',
                            6: 'Acuity Brands',
                            7: 'AIG'},
                   'Frequency': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 10}})

df['Frequency'] = df['Name'].map(c)
print(df)

产量

            Name  Frequency
0             3M          0
1     A.O. Smith          0
2         Abbott          0
3         AbbVie          0
4      Accenture          0
5     Activision          0
6  Acuity Brands          0
7            AIG        116

我在df 中添加了一行以显示一个重要的结果。

c 中没有对应的键时,Series.map(c) 将单独保留系列。因此,只有在 c 中具有相应键的行才会更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2018-10-12
    • 2023-01-30
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多