如何列出与每个活动相关的所有名称和年龄

阿努什

我有一个数据框,其中包含有关哪些人参加每个活动的信息。不幸的是,每条信息最多可以放置在多个不同的位置。那一行可以为许多不同的人提供信息。列名称如下:

['Name', 'Activity', 'Name.0', 'Age.0', 'Activity.0', 'Name.1', 'Age.1', 'Activity.1', 'Name.2', 'Age.2', 'Activity.2', 'Name.3', 'Age.3',  'Activity.3', 'Name.4', 'Age.4', 'Activity.4']

对于每个活动,我想列出与该活动相关的所有人员及其年龄(如果提供了该信息)。最终,我想为每个活动制作一张桌子。我怎样才能做到这一点?

感觉我需要首先处理所有。*列名,然后以某种方式对groupby Activity进行处理,但是我不确定该怎么做。

这是一些使用输出的匿名数据df.sample(5).to_dict()

{'Activity': {0: 'Audi', 1: 'Carn', 2: 'Pop-', 3: 'Samb', 4: 'Pre-'},
 'Activity.0': {0: 'Samb', 1: 'Pre-', 2: 'nan', 3: 'Samb', 4: 'Pre-'},
 'Activity.1': {0: 'Samb', 1: 'Audi', 2: 'nan', 3: 'Samb', 4: 'nan'},
 'Activity.2': {0: 'Pre-', 1: 'Audi', 2: 'nan', 3: 'nan', 4: 'nan'},
 'Activity.3': {0: 'nan', 1: 'Carn', 2: 'nan', 3: 'nan', 4: 'nan'},
 'Activity.4': {0: 'nan', 1: 'Carn', 2: 'nan', 3: 'nan', 4: 'nan'},
 'Age.0': {0: '18+', 1: 'Under 5', 2: '11', 3: '11', 4: 'Under 5'},
 'Age.1': {0: '11', 1: 'Under 5', 2: '11', 3: 17, 4: '18+'},
 'Age.2': {0: '11', 1: '18+', 2: 'nan', 3: '18+', 4: 'nan'},
 'Age.3': {0: 'Under 5', 1: '18+', 2: 'nan', 3: 'nan', 4: 'nan'},
 'Age.4': {0: 'nan', 1: '18+', 2: 'nan', 3: 'nan', 4: 'nan'},
 'Name': {0: 'Jess', 1: 'Tama', 2: 'Beki', 3: 'Havi', 4: 'Dror'},
 'Name.0': {0: 'Sam ', 1: 'Lila', 2: 'nan', 3: 'Joel', 4: 'Emil'},
 'Name.1': {0: 'Zipp', 1: 'Marg', 2: 'nan', 3: 'Solo', 4: 'Ari '},
 'Name.2': {0: 'Reub', 1: 'Joan', 2: 'nan', 3: 'Sami', 4: 'nan'},
 'Name.3': {0: 'Shev', 1: 'John', 2: 'nan', 3: 'nan', 4: 'nan'},
 'Name.4': {0: 'nan', 1: 'Edwa', 2: 'nan', 3: 'nan', 4: 'nan'}}

在此示例中,让我们进行名为“ Audi”的活动。仅有的人是“杰西”(无年龄),“玛格”(5岁以下)和“琼”(18岁以上)。对于活动“ Samb”,与之相关的人是“ Havi”(无年龄),“ Sam”(18岁以上),“ Joel”(11岁),“ Zipp”(11岁)和“ Solo”(17岁)。我希望每个活动都做同样的事情。

莫希特·沙玛(Mohit Sharma)

这将为您工作:

activities = {}
# function for Activity, Name
def add_details_for_activity(row):
    global activities
    if pd.notna(row[1]) and pd.notna(row[0]) and row[1] != 'nan' and row[0] != 'nan':
        if activities.get(row[0]) is not None:
            activities[row[0]].append(row[1])
        else:
            activities[row[0]] = [row[1]]

# function for Activity.#, Name.#, age.#   
def add_details_for_activities(row):
    global activities
    if pd.notna(row[1]) and pd.notna(row[0]) and row[1] != 'nan' and row[0] != 'nan':
        if activities.get(row[0]) is not None:
            if pd.notna(row[2]) and row[2] != 'nan':
                activities[row[0]].append((row[1], row[2]))
            else:
                activities[row[0]].append(row[1])
        else:
            print(row[0])
            if pd.notna(row[2]) and row[2] != 'nan':
                activities[row[0]] = [(row[1], row[2])]
            else:
                activities[row[0]] = [row[1]]


df[['Activity', 'Name']].apply(add_details_for_activity, axis = 1)
for i in range(5):
    df[['Activity.'+str(i), 'Name.'+str(i), 'Age.'+str(i)]].apply(add_details_for_activities, axis = 1)

样本输出为:

{'Audi': ['Jess', ('Marg', 'Under 5'), ('Joan', '18+')],
 'Carn': ['Tama', ('John', '18+'), ('Edwa', '18+')],
 'Pop-': ['Beki'],
 'Samb': ['Havi',
  ('Sam ', '18+'),
  ('Joel', '11'),
  ('Zipp', '11'),
  ('Solo', 17)],
 'Pre-': ['Dror', ('Lila', 'Under 5'), ('Emil', 'Under 5'), ('Reub', '11')]}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从dom文档中删除所有名称空间

如何列出在ipython会话中加载的所有名称?

如何更好地组织所有名称空间?

如何列出公共lisp中活动的所有已定义函数和全局变量

列出所有名称空间和插件(Octobercms)

列出所有名称以R或G开头并在其中包含字母I的成员

如何为所有名称空间更新Kubernetes机密

列出所有对象和相关活动SQL Server 2008R2

如何获取嵌套对象中的所有名称?

如何使用React JS列出所有名称并从Firebase下载Urls?

如何列出不存在的名称空间的所有对象?

如何列出所有PID和所有运行进程的名称

如何列出所有变量名称及其当前值?

如何列出所有用户及其活动的进程数

如何使用git列出两个不同版本之间的所有提交和相关更改

如何从文本块中提取所有名称

如何使用反射和递归获取任何对象的所有名称和值

如何打印每个人的信息并计算文件中列出的平均年龄和人数

如何从MySQL检索所有名称?

如何在Rails中列出特定类别的所有名称?

Unix:如何列出所有包含程序名称的目录

如何在python中比较多个文件并显示与SSN相关的所有名称变体

如何使用Tampermonkey或Fashion更改所有名称为x.png和x.png的图像?

列出电子表格中的所有名称并跳过前几个

如何列出与某个类别相关的所有项目

列出对象内绑定到特定类型的所有名称

使用 XSLT 列出 Firefox 中的所有名称空间

如何根据类别排列数据框,然后变异新的协变量,列出适合特定类别的所有名称

如何获取sql表的所有名称?