gpt4 book ai didi

python - 从由 "#"分隔的行值中提取最小值和最大值

转载 作者:太空宇宙 更新时间:2023-11-04 04:07:24 25 4
gpt4 key购买 nike

我有一个包含列的数据框,

Col_1    Col_2

'0' '-33#90#'
'-1#65#' '0'
'90' '-22#-44#90#250'

我想获取各个列值的最小值和最大值。我不知道如何获得它。

我的输出应该是这样的

Col_1_min  col_1_max   col_2_min   col_2_max
0 null -33 90
-1 65 0 null
90 null -44 250

最佳答案

您可以使用 Series.str.extractall 按列表中的列循环要获得负整数和正整数,按 Series.unstack reshape 并转换为数字 float 。然后用 Series.where 得到最小值和最大值如果值相同,则为错误值:

cols = ['Col_1', 'Col_2']
for c in cols:
df1 = df[c].str.extractall('([-]?\d+)')[0].unstack().astype(float)
min1 = df1.min(axis=1)
max1 = df1.max(axis=1)

df[f'{c}_min'] = min1
df[f'{c}_max'] = max1.mask(max1==min1)
print (df)
Col_1 Col_2 Col_1_min Col_1_max Col_2_min Col_2_max
0 '0' '-33#90#' 0 NaN -33 90.0
1 '-1#65#' '0' -1 65.0 0 NaN
2 '90' '-22#-44#90#250' 90 NaN -44 250.0

如果需要删除原来的列:

cols = ['Col_1', 'Col_2']
for c in cols:
df1 = df.pop(c).str.extractall('([-]?\d+)')[0].unstack().astype(float)
min1 = df1.min(axis=1)
max1 = df1.max(axis=1)
df[f'{c}_min'] = min1
df[f'{c}_max'] = max1.mask(max1==min1)
print (df)
Col_1_min Col_1_max Col_2_min Col_2_max
0 0 NaN -33 90.0
1 -1 65.0 0 NaN
2 90 NaN -44 250.0

编辑:

另一种拆分解决方案:

cols = ['Col_1', 'Col_2']
for c in cols:
df1 = df.pop(c).str.strip("'").str.split('#', expand=True)
df1 = df1.apply(pd.to_numeric, errors='coerce')
min1 = df1.min(axis=1)
max1 = df1.max(axis=1)
df[f'{c}_min'] = min1
df[f'{c}_max'] = max1.mask(max1==min1)
print (df)
Col_1_min Col_1_max Col_2_min Col_2_max
0 0.0 0.0 -33.0 NaN
1 -1.0 NaN 0.0 0.0
2 90.0 90.0 -44.0 NaN

关于python - 从由 "#"分隔的行值中提取最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57016624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com