我有两个数据帧:
模式2:
Mode month1 month2 month3 month4 month5 month6 month7 month8 month9 month10 month11 month12
0 100 0 0 0 0 0 0 0 0 0 0 0 0
2 602 0 2 1 0 2 1 0 2 1 0 2 1
3 603 1 0 2 1 0 2 1 0 2 1 0 2
11 802 0 11 10 9 8 7 6 5 4 3 2 1
df_ia:
RevalMonth_plus Mode
0 1 602
35 1 100
52 4 100
79 1 802
94 4 603
95 4 603
96 4 603
98 1 100
逻辑是将df_ia的每一行与modal2的每一行进行比较,如果df_ia的行与modal2的行具有相同的模式编号,则将modal2的month1列添加到df_ia
我可以通过以下代码成功完成此部分:
for index, row in modal2.iterrows():
conditions.append(df_ia['Mode'] == row['Mode'])
for col in ['month1']: #for loop list is because sometime need more than 1 column
col_v = modal2[col]
df_ia[col] = np.select(conditions, col_v, default=None)
输出为:
RevalMonth_plus Mode month1
0 1 602 0
35 1 100 0
52 4 100 0
79 1 802 0
94 4 603 1
95 4 603 1
96 4 603 1
98 1 100 0
但挑战在于:
如何将df_ia中的“month1”替换为相应的“RevalMonth_plus”,如下所示:
for col in [f'month{df_ia['RevalMonth_plus']}']: #for loop list is because sometime need more than 1 column
col_v = modal2[col]
df_ia[col] = np.select(conditions, col_v, default=None)
理想的输出应该是:
RevalMonth_plus Mode dynamic_moth_value
0 1 602 0 #month1
35 1 100 0 #month1
52 4 100 0 #month4
79 1 802 0 #month1
94 4 603 1 #month4
95 4 603 1 #month4
96 4 603 1 #month4
98 1 100 0 #month1
我花了整整一天的时间在这上面,但我做不到
尝试使用^{} 来重塑数据帧} {}来保持
modal2
,然后使用^{df_ia
的顺序:new_df
:具有唯一值以更清楚地显示映射的示例:
modal2
:df_ia
:new_df
:所有月份列都可以首先用
merge
进行映射:另一个解决方案:
印刷品:
对数据帧行进行迭代几乎总是错误的。您需要合并数据帧:
相关问题 更多 >
编程相关推荐