- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在处理调查数据,其中受访者接受了两次采访:一次是最初采访,一次是六到八个月后采访。每个月都会联系新的受访者,从而形成轮换的小组结构。如何使用以下信息将某人与他/她之前的 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/
如果我使用以下方法计算 java.time 中 2 个 LocalDate 之间的差异: Period p = Period.between(testDate, today); 然后我得到一个包含年、
我正在开发一个有多种不同费率的预订平台。这些费率由一天中的时间、星期几和一年中的一天决定。以下是所涉及的间隔类型的一些示例: 周一至周五,上午 9 点至下午 5 点 周六和周日,中午 12 点到早上
我有大量数据,包括开始时间、停止时间和值。开始和停止时间因行而异,以 5 分钟为增量。我正在尝试创建一个新的数据框,该数据框具有 5 分钟的间隔以及该间隔在行的开始和停止范围内的所有行的总和。 我有一
我有一个这样的表: --------------------------------------------- |Id | Step | StartedAt
我有一个网络应用程序,用户将在其中输入 2 个日期。一个 StartDate 和一个 EndDate。现在我想编写它,以便在选择 StartDate 和 EndDate 时确定有多少周,然后显示这些周
这看起来并不直截了当。 我正在尝试: @Override public int compare(Period o1, Period o2) { return o1.toStandardDays
我必须为团队发送 session 邀请,这是我的邮件 $ical = 'BEGIN:VCALENDAR PRODID:-//Microsoft Corporation//Outlook 11.0
我有这个 ISO 8601 时间段字符串: P0Y0M0DT3H5M0.000S 并且 PHP7.4 无法用它构造 DateInterval。 format('%h Hours %m Minutes
我想要获取包含一段时间(格式为 HH:MM:SS)的多个单元格的总和。在 LibreOffice Calc 4.0.3.3 中,我复制粘贴了 G14:G21 范围内的时间段,并将单元格格式设置为时间
我有一个表(MySQL),每n秒捕获一次样本。该表有很多列,但重要的是两列:时间戳(TIMESTAMP 类型)和计数(INT 类型)。 我想做的是获取一定时间范围内计数列的总和和平均值。例如,我每 2
我有一个表(MySQL),每n秒捕获一次样本。该表有很多列,但重要的是两列:时间戳(TIMESTAMP 类型)和计数(INT 类型)。 我想做的是获取一定时间范围内计数列的总和和平均值。例如,我每 2
我在一个项目上使用 joda-time (1.6.2),我正在做的其中一件事就是计算预测时间和实际时间之间的差异。这种差异有时是积极的,有时是消极的。虽然适当的方法可能是使用 Duration 而不是
我有一个表 (MySQL),它每 n 秒捕获一次样本。该表有很多列,但最重要的是两列:一个时间戳(TIMESTAMP 类型)和一个计数(INT 类型)。 我想做的是获取计数列在一段时间内的总和和平均值
我想让我的折线图显示过去 3 个月的数据。 GDS 有一个“最后一个季度”的日期范围,但这显示的是 Q1、Q2、Q3 或 Q4。我需要的是过去3个整月(不算当月)的数据。我尝试创建一个计算字段,但事实
我想让我的折线图显示过去 3 个月的数据。 GDS 有一个“最后一个季度”的日期范围,但这显示的是 Q1、Q2、Q3 或 Q4。我需要的是过去3个整月(不算当月)的数据。我尝试创建一个计算字段,但事实
我是一名优秀的程序员,十分优秀!