Python或lambda实用程序从数据集中筛选数据

2024-10-02 12:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用功能更新了问题。我需要使用下面的数据集,并根据azid中存在的uuid修改汇总列和快照间隔

输入

uuid    azid                    Rollup   Snapshot_Interval
ce2354  ['fe4578'; 'ce2354']    [1;1]   ['MONTHLY';'WEEKLY']
ca8458  ['de9874'; 'ca8458']    [7;6]   ['WEEKLY';'DAILY']
be4589  ['be4589';'we6780']     [4;6]   ['YEARLY','WEEKLY']

输出表:

uuid    azid                 Rollup  Snapshot_Interval
ce2354  ['fe4578'; 'ce2354']    1       MONTHLY
ca8458  ['de9874'; 'ca8458']    7       WEEKLY
be4589  ['be4589';'we6780']     6       WEEKLY

条件:1。将uuid与azid与Lambda进行比较。如果uuid位于azid的第二部分,则列rollup和snapshot_interval的正确值分别是rollup和snapshot_interval列列表中可用的第一个记录元素。 2.如果uuid位于azid的第一部分,则正确的值分别是rollup和snapshot_interval列列表中可用的记录的第二个元素

说明:

  1. uuid“ce2354”在azid的第二部分['fe4578';'ce2354']中可用,因此要显示的汇总和快照间隔必须为1,每月一次。这些在列表的第一部分中提供

  2. uuid“be4589”在azid的第一部分中可用[“be4589”;“we6780”],因此每周显示的汇总和快照间隔必须为6次。这些可在列表的第二部分中找到

我试着用pandas和Lambda编写下面的代码,但是我发现了一些错误。python中任何更新的方法都会有所帮助

df1= d1['Rollup'].str.extract(r'(\d+)',expand=False)
df2_updated = df2.loc[(df['uuid']==df['azid']), df2['Rollup'].str.extract(r'([a-zA-Z ]+)',expand=False)]  


Tags: 列表间隔uuidsnapshot快照汇总weeklyrollup
2条回答

如果azid必须包含uuidazid只是两个元素的列表,我认为这里有一个简单的解决方案:

df = pd.DataFrame({"uuid": ['ce2354', 'ca8458', 'be4589'],
               "azid": [['fe4578', 'ce2354'], ['de9874', 'ca8458'], ['be4589', 'we6780']],
               "Rollup": [[1,1], [7,6], [4,6]],
               "Snapshot_Interval": [['MONTHLY','WEEKLY'], ['WEEKLY','DAILY'], ['YEARLY','WEEKLY']]})

def find_index(uuid, azid):
    if (str(uuid) == str(azid[0])):
        return 1
    else:
        return 0

for i in range(df.shape[0]):
    df.Rollup[i] = df.Rollup[i][find_index(df.uuid[i], df.azid[i])]
    df.Snapshot_Interval[i] = df.Snapshot_Interval[i][find_index(df.uuid[i], df.azid[i])]

使用Lambda的解决方案:

df = pd.DataFrame({"uuid": ['ce2354', 'ca8458', 'be4589'],
               "azid": [['fe4578', 'ce2354'], ['de9874', 'ca8458'], ['be4589', 'we6780']],
               "Rollup": [[1,1], [7,6], [4,6]],
               "Snapshot_Interval": [['MONTHLY','WEEKLY'], ['WEEKLY','DAILY'], ['YEARLY','WEEKLY']]})

def find_index(uuid, azid):
    if (str(uuid) == str(azid[0])):
        return 1
    else:
        return 0    

df.Rollup = df.Rollup.apply(lambda x: x[find_index(df.uuid[df.Rollup.to_list().index(x)], df.azid[df.Rollup.to_list().index(x)])])
df.Snapshot_Interval = df.Snapshot_Interval.apply(lambda x: x[find_index(df.uuid[df.Snapshot_Interval.to_list().index(x)], df.azid[df.Snapshot_Interval.to_list().index(x)])])

相关问题 更多 >

    热门问题