从数据帧上的另一列创建一个包含最长字符串(天)的新列



我有以下数据帧:

import pandas as pd
df = pd.DataFrame({'Number_sensor': [0, 1, 1, 2, 3], 
'Time_backup_freq': ['2DAY/36 DAY/12DAY', '12DAY/36 DAY', '12DAY/36DAY', 
'2 DAY', '2 DAY/24 DAY']})
print(df)

我想创建一个新列,其中包含传感器备份的最大天数。我希望生成的数据帧是:

Number_sensor    Time_backup_freq          NEW_COLUMNS
0          2DAY/36 DAY/12DAY               36DAY
1           12DAY/36 DAY                   36DAY        
1              12DAY/36DAY                 36DAY
2                2 DAY                     2DAY
3             2 DAY/24 DAY                 24DAY

df['Time_backup_freq'] = df['Time_backup_freq'].astype(str)

我唯一能想到的就是创建一个从大到小的数组,如下所示:

array_crescent = np.array(['36 DAY', '36DAY', '24 DAY', '12 DAY', '2 DAY', '2DAY'])

但是我不知道如何通过比较较大的日期字符串来迭代数据帧。

我有一个新的数据帧,这一次,不仅是月,也是一个小时。您必须针对此问题调整代码(因为现在 100 小时<12 天(

import pandas as pd
df = pd.DataFrame({'Number_sensor': [0, 1, 1, 2, 3], 
'Time_backup_freq': ['2MO/36 MO/12MO',
'12MO - 36HOUR', 
'12MO/36MO', 
'2 MO/10 HOUR', 
'100 HOUR 24 MO']})

使用str.extractall提取所有数字,然后使用GroupBy.max获取每行的max

df['NEW_COLUMNS'] = (
df['Time_backup_freq'].str.extractall('(d+)').groupby(level=0).max().add('DAY')
)

Number_sensor   Time_backup_freq NEW_COLUMNS
0              0  2DAY/36 DAY/12DAY       36DAY
1              1       12DAY/36 DAY       36DAY
2              1        12DAY/36DAY       36DAY
3              2              2 DAY        2DAY
4              3       2 DAY/24 DAY       24DAY

考虑到你的数字总是用/分隔,并且有示例格式(你基本上可以按字母顺序对每个频率进行排序(,你可以得到最大的数字,如下所示:

>>> import pandas as pd
>>>
>>> df = pd.DataFrame({'Number_sensor': [0, 1, 1, 2, 3],
...                  'Time_backup_freq': ['2DAY/36 DAY/12DAY', '12DAY/36 DAY', '12DAY/36 DAY',
...                                       '2 DAY', '2 DAY/24 DAY']})
>>> df.Time_backup_freq.str.split('/').apply(max)
0    36 DAY
1    36 DAY
2    36 DAY
3     2 DAY
4    24 DAY
Name: Time_backup_freq, dtype: object

相关内容

最新更新