全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
490 3
2024-08-15
可能是个有点复杂的问题。我的数据中有以下几个变量:year newzlid 专利类型 发明设计人 申请人 match
year的值都是一样的,不用管;match是对申请人变量操作得来的。现在我想做一个year-match-申请人-专利信息的数据集,
意思就是,对于同一个“year-match-申请人”,可能有多个专利信息,我希望这些专利信息可以横向合并,最后的结果大概这样:

"year-match-申请人-newzlid1-专利类型1-发明设计人1"(1个专利信息的情况下)
"year-match-申请人-newzlid1-专利类型1-发明设计人1-newzlid2-专利类型2-发明设计人2"(2个专利信息的情况下)
依此类推,这样需要什么样的代码呢?
二维码

扫码加我 拉你入群

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

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

全部回复
2024-8-15 10:15:40
可用Python的pandas库实现这个操作。下面是一个示例代码展示如何将相同的year-match-申请人组合在一起,并将对应的专利信息横向合并。
假设的数据结构
year        match        申请人        newzlid        专利类型        发明设计人
2024        M1        A        ZL1        类型1        设计人1
2024        M1        A        ZL2        类型2        设计人2
2024        M1        B        ZL3        类型1        设计人3
2024        M2        A        ZL4        类型1        设计人4

import pandas as pd

# 假设已将数据加载到DataFrame
data = pd.DataFrame({
    'year': [2024, 2024, 2024, 2024],
    'match': ['M1', 'M1', 'M1', 'M2'],
    '申请人': ['A', 'A', 'B', 'A'],
    'newzlid': ['ZL1', 'ZL2', 'ZL3', 'ZL4'],
    '专利类型': ['类型1', '类型2', '类型1', '类型1'],
    '发明设计人': ['设计人1', '设计人2', '设计人3', '设计人4']
})

# 按照 year, match, 申请人 进行分组
grouped = data.groupby(['year', 'match', '申请人'])

# 定义一个函数,将 newzlid, 专利类型, 发明设计人 横向合并
def combine_patent_info(group):
    combined_info = []
    for _, row in group.iterrows():
        combined_info.extend([row['newzlid'], row['专利类型'], row['发明设计人']])
    return pd.Series(combined_info)

# 对分组后的数据应用合并函数
result = grouped.apply(combine_patent_info).reset_index()

# 清理结果表格:移除多余的列名并重命名
result.columns = ['year', 'match', '申请人'] + [f'专利信息{i+1}' for i in range(result.shape[1] - 3)]

# 打印结果
print(result)

代码将会产生一个结果表格,每行对应一个 year-match-申请人 组合,并将所有相关的专利信息横向合并。如:
year        match        申请人        专利信息1        专利信息2        专利信息3        专利信息4        专利信息5        专利信息6
2024        M1        A        ZL1        类型1        设计人1        ZL2        类型2        设计人2
2024        M1        B        ZL3        类型1        设计人3        NaN        NaN        NaN
2024        M2        A        ZL4        类型1        设计人4        NaN        NaN        NaN

每行代表一个year-match-申请人的组合。每个专利信息(包括 newzlid, 专利类型, 发明设计人)在同一行横向排列。如果某个year-match-申请人的组合有多于一个专利信息,依次列在同一行中。
二维码

扫码加我 拉你入群

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

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

2024-8-15 15:07:17
att006 发表于 2024-8-15 10:15
可用Python的pandas库实现这个操作。下面是一个示例代码展示如何将相同的year-match-申请人组合在一起,并 ...
是这个意思,但是运行了很久都出不来结果,不知道是不是运算量太大了
二维码

扫码加我 拉你入群

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

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

2024-8-15 15:14:38
科研吗喽 发表于 2024-8-15 15:07
是这个意思,但是运行了很久都出不来结果,不知道是不是运算量太大了
result.columns = ['year', 'match', '申请人'] + [f'专利信息{i+1}' for i in range(result.shape[1] - 3)]应该是卡在在这一行
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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