python - 在熊猫数据框中使用不同的值移动每个索引的行
问题描述
以下是样本数据:
sample_col = ["col1","col2","col3","col4", "col5"]
sample_data = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
sample = pd.DataFrame(data = data_data, columns = data_col)
sample
col1 col2 col3 col4 col5
0 1 2 3 4 5
1 6 7 8 9 10
2 11 12 13 14 15
3 16 17 18 19 20
m = [0,1,2,1]
我需要将数据框样本中的每一行移动列表中的相应值m
。
输出应该是这样的
col1 col2 col3 col4 col5
0 1 2 3 4 5
1 NaN 6 7 8 9
2 NaN NaN 11 12 13
3 NaN 16 17 18 19
我知道我可以sample.iloc[i].shift(m[i])
通过应用循环来一一或全部实现我想要的。但是我有一个非常大的数据集,需要很长时间才能完成。
那么有没有更好的方法来实现我想要做的事情?欢迎任何帮助。
解决方案
您可以使用布尔切片为每个移位操作仅选择感兴趣的行。如果set
ofm
很大,它仍然会很慢,但比你拥有的要快。
import pandas as pd
import numpy as np
sample_col = ["col1","col2","col3","col4", "col5"]
sample_data = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
sample = pd.DataFrame(data = sample_data, columns = sample_col)
m = [0,1,2,1]
marr = np.array(m)
for i in sorted(set(m)):
if i==0:
continue
sample.loc[marr==i] = sample.loc[marr==i].shift(i, axis=1)
推荐阅读
- sonos - Sonos Api:有没有办法了解 Sonos 最喜欢玩的是哪个?
- unreal-engine4 - 如果不重新启动,虚幻引擎将无法启动到 Oculus Quest 2
- python - 一个类必须实现所有抽象方法吗?
- angular - Angular 10 表单动作没有变化
- apache-kafka - Quarkus Kafka - 批量/批量消息消费者
- python - 使用 lxml 和 xpath 的代码适用于单个 xml 文件,但在扩展到类似 xml 的集合时会失败
- python - 在 python 代码中找不到“名称未定义”的原因
- c - 为什么我在运行我的 c 程序后总是得到 0?请帮帮我
- python - 使用图像、Flask、Gcloud Storage、Openpyxl 流式传输 Excel 文件时出现问题,无法保存所有图像的文件
- ssh - 在“ddev auth ssh”上找不到目录