python - 根据另一列的多行填充 DataFrame 列
问题描述
我有一个 DataFrame nplt:
nplt
Out[120]:
sexage npark16cd population page
0 M00 E26000001 146.631840 NaN
1 M01 E26000001 122.677630 NaN
2 M02 E26000001 127.645516 NaN
3 M03 E26000001 138.313014 NaN
4 M04 E26000001 150.898252 NaN
5 M05 E26000001 149.086291 NaN
6 M06 E26000001 145.075953 NaN
7 M07 E26000001 159.893446 NaN
8 M08 E26000001 149.886962 NaN
9 M09 E26000001 182.406901 NaN
10 M10 E26000001 182.058425 NaN
11 M11 E26000001 186.962104 NaN
12 M12 E26000001 200.875284 NaN
13 M13 E26000001 209.038917 NaN
14 M14 E26000001 163.530837 NaN
15 M15 E26000001 161.171527 NaN
我希望根据性别填充列页面,例如,其中性别等于 M00、M01、M02、M03 我希望页面为 p0_3,并且性别等于 M04、M05、M06 我希望页面连续为 p4_6,例如:
nplt
Out[120]:
sexage npark16cd population page
0 M00 E26000001 146.631840 p0_3
1 M01 E26000001 122.677630 p0_3
2 M02 E26000001 127.645516 p0_3
3 M03 E26000001 138.313014 p0_3
4 M04 E26000001 150.898252 p4_6
5 M05 E26000001 149.086291 p4_6
6 M06 E26000001 145.075953 p4_6
7 M07 E26000001 159.893446 NaN
8 M08 E26000001 149.886962 NaN
9 M09 E26000001 182.406901 NaN
10 M10 E26000001 182.058425 NaN
11 M11 E26000001 186.962104 NaN
12 M12 E26000001 200.875284 NaN
13 M13 E26000001 209.038917 NaN
14 M14 E26000001 163.530837 NaN
15 M15 E26000001 161.171527 NaN
等等。我的实际 DataFrame 中的性别列范围为 M00-M90 和 F00-F90。
有没有一种有效的方法来做到这一点?
提前谢谢了。
为了更清楚地解释,我希望 F00、F01、F02 和 F03 以及 M00、M01、M02 和 M03 系列的等价物在页面中具有值 p0_3,对于 M04、M05、M06 和 F04、F05 和F06 为页面设置值为 p4_6。例如:
nplt
Out[120]:
sexage npark16cd population page
0 M00 E26000001 146.631840 p0_3
1 M01 E26000001 122.677630 p0_3
2 M02 E26000001 127.645516 p0_3
3 M03 E26000001 138.313014 p0_3
4 M04 E26000001 150.898252 p4_6
5 M05 E26000001 149.086291 p4_6
6 M06 E26000001 145.075953 p4_6
7 M07 E26000001 159.893446 p7_10
8 M08 E26000001 149.886962 p7_10
9 M09 E26000001 182.406901 p7_10
10 M10 E26000001 182.058425 p7_10
11 M11 E26000001 186.962104 NaN
12 M12 E26000001 200.875284 NaN
13 M13 E26000001 209.038917 NaN
14 M14 E26000001 163.530837 NaN
15 M15 E26000001 161.171527 NaN
2355 F80 W18000003 102.553290 nan
2356 F81 W18000003 115.013810 nan
2357 F82 W18000003 94.524735 p82_85
2358 F83 W18000003 77.677229 p82_85
2359 F84 W18000003 103.239723 p82_85
2360 F85 W18000003 82.496796 p82_85
2361 F86 W18000003 71.609379 p86_90
2362 F87 W18000003 83.220993 p86_90
2363 F88 W18000003 80.120960 p86_90
2364 F89 W18000003 65.742056 p86_90
2365 F90 W18000003 204.664775 p86_90
我希望 M00-M90 和 F00-F90 (p0_4, p4_6, p7_10 ... p86_90) 中的分组相同。列页面中的值将在未来的代码中抽样分层。
列页面中有不同数量的成员的原因是因为这些是基于具有不同范围的年龄组,例如,0-3、4-6、5-7、8-12、13、14-18。 ..一直到90。
我努力了:
nplt.loc[(nplt['sexage'] == {'M00', 'M01', 'M02', 'M03', 'F00', 'F01',
'F02', 'F03'}), 'page'] = 'p0_3'
但是它不起作用。任何帮助都非常感谢。
解决方案
indexes = {}
for i in range(0, 5):
indexes[i] = 'p0_4'
for i in range(5, 8):
indexes[i] = 'p5_7'
nplt['page'] = [indexes.get(x) for x in nplt['age']]
where nplt['age'] = 0 1 2 3 4 5 6 7
nplt
Out[169]:
sexage npark16cd population page age
0 M00 E26000001 146.631840 p0_4 0
1 M01 E26000001 122.677630 p0_4 1
2 M02 E26000001 127.645516 p0_4 2
3 M03 E26000001 138.313014 p0_4 3
4 M04 E26000001 150.898252 p0_4 4
5 M05 E26000001 149.086291 p5_7 5
6 M06 E26000001 145.075953 p5_7 6
7 M07 E26000001 159.893446 p5_7 7
推荐阅读
- google-apps-script - GAS - “您无权调用 SpreadsheetApp.openById”
- python - 如何使用熊猫在百分比字符串列中应用过滤条件?
- static-analysis - 如何使用 checkstyle 或 PMD 在单独的行中强制执行多个异常捕获?
- r - 当 x/y 包含重复元素时,插值 (akima) 会省略部分数据
- reactjs - React 是否扼杀了 Shadow-DOM 的概念?
- c# - 如何在 C# 中检索可用 azure vm 大小的目录?
- asynchronous - 是否有将消息队列通信同步到手动请求/响应的模式?
- angular - 材料表未填充
- python - manage.py flush 在测试期间不起作用
- python - 额外冗长的python调试器