我有以下数据框:
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'])
但是我不知道如何通过比较较大的日期字符串来迭代数据框。
这次,我有了一个新的数据框,不仅Month还是Hour。您必须修改代码以解决此问题(从现在起100 HOUR <12DAY)
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']})
答案 0 :(得分:1)
使用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
答案 1 :(得分:0)
考虑到您的数字始终以/
隔开,并具有示例格式(基本上可以按字母顺序排列每个频率),则可以这样获得最大的数字:
>>> 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