我有一个包含第一列的DataFrame:
Brand Price
Samsung 75.5,99.2
Lenovo 50.3
Lg 60.5,88.4
如果单元格包含2个值,我希望提取最大值。我试一试下面的条件:
for x in df['Price']:
if 0 <= len(x) <= 5:
df['Price'] = df['Price'].str[0:5]
else:
df['Price'] = df['Price'].str[6:12]
但是它不适用于包含单个值的单元格,它返回一个空白单元格。
发布于 2022-03-10 10:35:11
我们可以在逗号上str.split
列,然后使用apply
查找每行的最大值(每个字符串都需要转换为浮点数,以便max
按预期的方式运行):
df['Price'] = df['Price'].str.split(',').apply(lambda c: max(map(float, c)))
或者,展开为一个DataFrame,并将整个DataFrame转换为与astype
一起浮动,并获取每一行的max
(axis=1
):
df['Price'] = df['Price'].str.split(',', expand=True).astype(float).max(axis=1)
假设逗号分隔的值是排序的(最后一个值总是最大的),我们也可以使用str
accessor获得最后一个值(索引-1
):
df['Price'] = df['Price'].str.split(',').str[-1]
所有选项都生成输出df
(用于提供示例):
Brand Price
0 Samsung 99.2
1 Lenovo 50.3
2 Lg 88.4
设置:
import pandas as pd
df = pd.DataFrame({
'Brand': ['Samsung', 'Lenovo', 'Lg'],
'Price': ['75.5,99.2', '50.3', '60.5,88.4']
})
https://stackoverflow.com/questions/71426668
复制