gpt4 book ai didi

python - 如何匹配某个人在不同时间段内的调查响应以形成面板数据集?

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:31 25 4
gpt4 key购买 nike

我正在处理调查数据,其中受访者接受了两次采访:一次是最初采访,一次是六到八个月后采访。每个月都会联系新的受访者,从而形成轮换的小组结构。如何使用以下信息将某人与他/她之前的 Python 面试相匹配:

   CASEID  YYYYMM  ID IDPREV  DATEPR   INCOME
1 2 198706 2 382 198612 12500
2 3 198706 3 4 198612 2500
3 4 198706 4 67 198612 27500
4 5 198706 5 134 198612 12500
5 6 198706 6 193 198612 22500

因此,第一行指出该人之前对调查的回答包含在之前日期为 198612(1986 年 12 月)且 ID 为 382 的行中。我如何使用我的信息来匹配这些回答必须创建以下形式的面板数据集:

   CASEID  YYYYMM  ID IDPREV  DATEPR   INCOME
1 463 198612 382 - - 12000
1856 198706 2 382 198612 12500
2 97 198612 4 - - 3500
1857 198706 3 4 198612 2500
3 164 198612 67 - - 25000
1858 198706 4 67 198612 27500
4 289 198612 134 - - 12500
1859 198706 5 134 198612 12500
5 323 198612 193 - - 22500
1860 198706 6 193 198612 22500

我研究了 pandas 的“合并”文档,并尝试了几种不同的方法通过索引来匹配日期和 ID,但似乎无法获取面板数据结构。

最佳答案

开头为:

   CASEID  YYYYMM   ID  IDPREV    DATEPR  INCOME
0 463 198612 382 NaN NaN 12000
1 1856 198706 2 382.0 198612.0 12500
2 97 198612 4 NaN NaN 3500
3 1857 198706 3 4.0 198612.0 2500
4 164 198612 67 NaN NaN 25000
5 1858 198706 4 67.0 198612.0 27500
6 289 198612 134 NaN NaN 12500
7 1859 198706 5 134.0 198612.0 12500
8 323 198612 193 NaN NaN 22500
9 1860 198706 6 193.0 198612.0 22500

您可以通过合并来合并两个观察结果:

combined = pd.merge(df, df, left_on=['YYYYMM', 'ID'], right_on=['DATEPR', 'IDPREV'], suffixes=['_1', '_2'])

CASEID_1 YYYYMM_1 ID_1 IDPREV_1 DATEPR_1 INCOME_1 CASEID_2 YYYYMM_2 \
0 463 198612 382 NaN NaN 12000 1856 198706
1 97 198612 4 NaN NaN 3500 1857 198706
2 164 198612 67 NaN NaN 25000 1858 198706
3 289 198612 134 NaN NaN 12500 1859 198706
4 323 198612 193 NaN NaN 22500 1860 198706

ID_2 IDPREV_2 DATEPR_2 INCOME_2
0 2 382.0 198612.0 12500
1 3 4.0 198612.0 2500
2 4 67.0 198612.0 27500
3 5 134.0 198612.0 12500
4 6 193.0 198612.0 22500

您可以从中选择所需的,或者在合并时:

combined = pd.merge(df.loc[:, ['CASEID', 'YYYYMM', 'ID', 'INCOME']], df,
left_on=['YYYYMM', 'ID'], right_on=['DATEPR', 'IDPREV'], suffixes=['_1', '_2'])


CASEID_1 YYYYMM_1 ID_1 INCOME_1 CASEID_2 YYYYMM_2 ID_2 IDPREV \
0 463 198612 382 12000 1856 198706 2 382.0
1 97 198612 4 3500 1857 198706 3 4.0
2 164 198612 67 25000 1858 198706 4 67.0
3 289 198612 134 12500 1859 198706 5 134.0
4 323 198612 193 22500 1860 198706 6 193.0

DATEPR INCOME_2
0 198612.0 12500
1 198612.0 2500
2 198612.0 27500
3 198612.0 12500
4 198612.0 22500

您可以从这里组建一个小组:

combined = combined.reset_index().set_index('index')
df1 = combined.loc[:, ['CASEID_1', 'YYYYMM_1', 'ID_1', 'INCOME_1']]
df1.rename(columns={col: col[:-2] for col in df1.columns}, inplace=True)
df2 = combined.loc[:, ['CASEID_2', 'YYYYMM_2', 'ID_2', 'INCOME_2']]
df2.rename(columns={col: col[:-2] for col in df2.columns}, inplace=True)

panel = pd.concat([df1, df2]).sort_index()

CASEID YYYYMM ID INCOME
index
0 463 198612 382 12000
0 1856 198706 2 12500
1 97 198612 4 3500
1 1857 198706 3 2500
2 164 198612 67 25000
2 1858 198706 4 27500
3 289 198612 134 12500
3 1859 198706 5 12500
4 323 198612 193 22500
4 1860 198706 6 22500

关于python - 如何匹配某个人在不同时间段内的调查响应以形成面板数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com