Pandas 赋值、Lambda、列表理解问题

问题描述 投票:0回答:1

我收到的数据是单列中的字典列表。每个列表的长度可以不同。示例数据如下所示:

df = pd.DataFrame(
    [
        [[{'value': 1}, {'value': 2}, {'value': 3}]],
        [[{'value': 4}, {'value': 5}]]
    ],
    columns=['data'],
)

df
                                          data
0   [{'value': 1}, {'value': 2}, {'value': 3}]
1   [{'value': 4}, {'value': 5}]

我想创建一个新列

min_val
,其中包含每行的最小值。我正在尝试这个:

df.assign(min_val=lambda row: min(val['value'] for val in row.data))

但是我收到错误:

TypeError: list indices must be integers or slices, not str

非常相似的 lambda/推导式组合在 Dask Bag 中有效,但在原始 Pandas 中无效,这非常令人困惑。

任何帮助将非常感激。

pandas lambda list-comprehension assign
1个回答
0
投票
df['min_val'] = df['data'].apply(lambda x: min(item['value'] for item in x))
© www.soinside.com 2019 - 2024. All rights reserved.