【问题标题】:Replace python pandas df with values of a second dataframe based with condition将 python pandas df 替换为基于条件的第二个数据帧的值
【发布时间】:2013-12-09 16:24:21
【问题描述】:

我是 python 新手,因为我通常在 R 中编写脚本,因此正在学习适应 Pandas 数据框和细微差别。

我有两个字典列表,我将它们转换为数据帧,因为我认为以这种格式使用会更容易。

df1= [{u'test': u'SAT Math', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': 404}, {u'test': u'SAT Verbal', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': 355}, {u'test': u'SAT Writing', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': 363}, {u'test': u'SAT Composite', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': 1122}, {u'test': u'ACT Math', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': None}, {u'test': u'ACT English', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': None}, {u'test': u'ACT Reading', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': None}, {u'test': u'ACT Science', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': None}, {u'test': u'ACT Composite', u'25th_percentile': None, u'75th_percentile': None, u'50th_percentile': None, u'mean': None}]


df2 = [{u'test': u'SAT Composite', u'mean': 1981}, {u'test': u'ACT Composite', u'mean': 29.6}]

然后我将这些作为数据框:

df1new = DataFrame(df1, columns=['test', '25th_percentile', 'mean', '50th_percentile','75th_percentile'])
df2new = DataFrame(df2)

现在,如果 'test' == "ACT Composite" 且 'mean' 为 None,我想替换 df1new 中的 'mean' 列的内容

我曾尝试使用 combine_first 方法,但我相信这需要数据帧的索引更加相似。 我也试过:

if df1new['test'] == "ACT Composite" and df1new['mean'] == None:
            df1new['mean'] == df2new['mean']

以及 .replace() 变体。

任何建议将不胜感激! 先感谢您!

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    也许是这样的:

    idx = (df1new.test == 'ACT Composite') & df1new['mean'].isnull()
    df1new['mean'][idx] = df2new['mean'][1]
    

    我在那里添加了一个[1],因为我想这就是你想要的,mean 值对应于df2new 中的ACT Composite。也可以写成

    df1new['mean'][idx] = df2new['mean'][df2new.test == 'ACT Composite']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 2016-04-29
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多