【问题标题】:Getting a maximum value from a list in pandas columns从熊猫列中的列表中获取最大值
【发布时间】:2022-01-25 14:25:21
【问题描述】:

我有以下数据框。

df

Col1                     Col2           Col3
0.00               [50.00, 100.00]      Tall
50.00                     0.00           NaN
[0.00, 50.00, 60.00]      10.00         Short  

我想在列表值中应用 max-of-all 并希望得到以下结果。

Col1        Col2       Col3
0.00       100.00      Tall
50.00       0.00       NaN
60.00      10.00      Short

我已经尝试过了,但没有成功。

df = df.apply(lambda x: max(map(int, x.split(','))))

有人可以帮忙吗?

【问题讨论】:

  • 单元格内容是字符串还是实际的 Python 列表?
  • 当我看到数据框数据类型时,它返回float。我该如何检查?
  • 你能做到df.to_dict()并把输出粘贴到这里

标签: python pandas list


【解决方案1】:

方法一:

您可以在此处使用 applymap 来检查实例是否为列表,返回列表的最大值,否则按原样返回元素:

out = df.applymap(lambda x: max(x) if isinstance(x,list) else x)

方法二:

您可以堆叠数据框,然后将函数应用于系列,然后取消堆叠以获得原始形状:

out = df.stack().apply(lambda x: max(x) if isinstance(x,list) else x).unstack()

print(out)

   Col1   Col2   Col3
0   0.0  100.0   Tall
1  50.0    0.0    NaN
2  60.0   10.0  Short

请注意,这假定带有 list 的行是实际的 Python 列表,而不是列表的字符串表示形式。

【讨论】:

  • 这很完美!我使用了方法2。
【解决方案2】:

你也可以这样用:

df = df[df.columns].apply(lambda x: x.explode().groupby(level=0).max())

OUTPUT

   Col1  Col2   Col3
0   0.0   100   Tall
1  50.0     0    NaN
2  60.0    10  Short

【讨论】:

    猜你喜欢
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多