楼主: Tigflanker
1687 3

[问答] 求助一个pandas.DataFrame+Dict的问题 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.9128
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

楼主
Tigflanker 发表于 2019-1-5 22:57:49 |AI写论文
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函数)
关键词:多维映射 数据集 主数据 有没有
Bye SAS.
若有缘,能重聚。

沙发
飞天玄舞6 在职认证  发表于 2019-1-5 22:57:50
把你的映射集中age取出来,对group和value做键值对(使用pandas的itertuples),同理,sex也这样做;然后分别对你的main数据集的age和sex做映射(Python有map函数)
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 5 + 2 + 2 + 2 我尝试一下itertuples,感谢

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

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

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

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

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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 08:49