全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1688 3
2019-01-05
悬赏 100 个论坛币 已解决
各位大神新年好~~

我有一个疑问想求助下各位,举例如下:
这是个主数据集(main)
idagesex

1

1

1

2

2

2

3

1

1

4

2

1

5

1

nan

6

2

2

7

3

2

8

2

1


这个是映射数据集sub(可以理解为一个字典)
Vargroupvalue
age

1

123

age

2

234

age

3

345

sex

1

456

sex

2

567

sexnan

678


这是映射的结果(举了id = 1,2的情况)
idagesex

1

123

456

2

234

567


现在的状况是:
这个主数据集非常非常大,几十万甚至百万观测、变量有将近500个
我其实想拿第二个映射数据集对主数据集的每个元素做映射

我是这么写的:
1. 先把sub数据集的值做成个字典dict,例如dict['age'][1] -> 123
2. 然后用这个字典对main做遍历,如:main.apply(lambda x:x.replace(dict[x.name]))
    意思就是先用apply函数遍历取变量,每列变量取出来后取和这个变量对应的字典,然后再用replace方法去对整列数据做映射

等了30分钟都出不来,最后核死
SAS中可以用input+format,或者用hash table,python中请问有没有好的办法呢?
这种多维映射很头疼,求助各位大神



最佳答案

飞天玄舞6 查看完整内容

把你的映射集中age取出来,对group和value做键值对(使用pandas的itertuples),同理,sex也这样做;然后分别对你的main数据集的age和sex做映射(Python有map函数)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-1-5 22:57:50
把你的映射集中age取出来,对group和value做键值对(使用pandas的itertuples),同理,sex也这样做;然后分别对你的main数据集的age和sex做映射(Python有map函数)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-1-6 13:03:09
飞天玄舞6 发表于 2019-1-6 12:26
把你的映射集中age取出来,对group和value做键值对(使用pandas的itertuples),同理,sex也这样做;然后分 ...
感谢回复,问一下您;对group和value去做itertuples生成键值对,这个和做成dict会有本质性的差别么?

因为之前一直用dict,昨天才接触到itertuples
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-1-6 13:40:09
飞天玄舞6 发表于 2019-1-6 12:26
把你的映射集中age取出来,对group和value做键值对(使用pandas的itertuples),同理,sex也这样做;然后分 ...
因为我尝试过map和apply方法,有做过对主数据集做apply取列,然后通过列名取相应字典,在用map去映射到每列变量中的每个值

但是现在比较大的问题是,要对主数据集做映射,所以对主数据的循环方法会非常敏感
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群