努力尝试为数据框选择值

时间:2017-08-31 10:21:43

标签: pandas

我有一个df,这些值是一个字典,看起来像这样:

                            'kg of valencian tomato (before tomatina)'
        2017-06-09  {'weight': 0.0049385761, 'price': 12.18, 'time':'14:17'}
        2017-06-12  {'weight': 0.0049441361, 'price': 12.1, 'time': '15:21'}
        2017-06-13  {'price': 12.06, 'weight': 0.00491616, 'time': '09:21'}
        2017-06-14  {'weight': 0.0048403923, 'price': 11.77, 'time':'10:12'}

我期待的是这样的df的值是price

                    'kg of valencian tomato (before tomatina)'
        2017-06-09           12.18
        2017-06-12           12.1
        2017-06-13           12.06
        2017-06-14           11.77

我首先尝试的是:

format = lambda x: list(x.values())[1]
df2=df2.applymap(format)

直到我注意到不同的词典没有遵循相同的顺序。我怎样才能获得所需的输出?

我面临的另一个问题是我有大量不同名称的列,有没有办法将它应用到整个df?

1 个答案:

答案 0 :(得分:1)

您可以使用apply

df['price'] = df['kg of valencian tomato (after tomatina)'].apply(lambda x: x['price'])
print (df)
                      kg of valencian tomato (after tomatina)  price
2017-06-09  {'price': 12.18, 'time': '14:17', 'weight': 0....  12.18
2017-06-12  {'price': 12.1, 'time': '15:21', 'weight': 0.0...  12.10
2017-06-13  {'price': 12.06, 'time': '09:21', 'weight': 0....  12.06
2017-06-14  {'price': 11.77, 'time': '10:12', 'weight': 0....  11.77

如果有dict的多个列使用applymap

cols = ['kg of valencian tomato (after tomatina)','another col']
df[cols] = df[cols].applymap(lambda x: x['price'])
print (df)
            kg of valencian tomato (after tomatina)
2017-06-09                                    12.18
2017-06-12                                    12.10
2017-06-13                                    12.06
2017-06-14                                    11.77