'Python - Import CSV as DataFrame, filter with groupby and export results as formatted text

I'm struggling behind a python script to import a formatted CSV ("," as delimiter) as DataFrame, group the result by value in specific column and based on that groups I need to output a formatted CLI config script for a network device.

I would be very happy if someone could help me

My CSV (users.csv) is something like this

user,email,group
pippo1,[email protected],grp1
pippo2,[email protected],grp1
pippo10,[email protected],grp2
user10,[email protected],grp3
user93,[email protected],grp1

Now I'm able to import and group data by "group" column with

    df = pd.read_csv('users.csv', sep=',')
    grouped = df.groupby('group')

What I'm not able to do is to produce a text output like this

Intro
edit grp1
append member pippo1 pippo2 user93
next
edit grp2
append member pippo10
next
edit grp3
append member user10
next
end

With the "for" below I get this result and unfortunately is not what I'm trying to achieve

    for group in grouped:
    print (group)
    grp = group[0]
    usergrp_text += "edit " + grp
    usertoappend = group[1]
    print (usertoappend['user'].to_string(index=False))

print of group variable

('grp1',      user                        email group  0  pippo1       [email protected]  grp1  1  pippo2   [email protected] grp1 4  user93  [email protected]  grp1)

print of group[1] variable

pippo1 pippo2 user93



Solution 1:[1]

When doing for group in grouped in reality you are getting a tuple with groupname,groupcontents.

Use the groupname for the edit and expand the users with a comprehension of the user field of the "sub-dataframe". Not the most efficient, but gets the job done

grouped = df.groupby('group')
print("Intro")
for k,g in grouped:
    print(f"edit {k}")
    print(f"append member {' '.join([x for x in g.user])}")
    print("next")
print("end")

Prints:

Intro
edit grp1
append member pippo1 pippo2
next
edit grp2
append member pippo10
next
edit grp3
append member user10
next
end

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Zaero Divide