python - Pandas:跨列动态移动值
问题描述
我有以下df:
sales2001 sales2002 sales2003 sales2004
200012 19.12 0.98
200101 19.1 0.98 2.3
200102 21 0.97 0.8
...
200112 19.12 0.99 2.4
200201 0.98 2.5
200202 0.97 0.8 1.2
我想移动内容以使其与时间间隔视图对齐,如下所示:
sales+1y sales+2y
200012 19.12 0.98
200101 0.98 2.3
200102 0.97 0.8
...
200112 0.99 2.4
200201 0.98 2.5
200202 0.8 1.2
基本上将预测数据点与索引的固定时间间隔对齐。我尝试使用 iterrows 并动态调用给定索引的列,但无法使其工作。你们有什么建议吗?
解决方案
使用justify和删除所有至少包含一个的DataFrame.dropna
列:axis=1
NaN
df1 = (pd.DataFrame(justify(df.values, invalid_val=np.nan, side='right'), index=df.index)
.dropna(axis=1))
如果需要按位置选择最后一列:
df1 = pd.DataFrame(justify(df.values, invalid_val=np.nan, side='right')[:, -2:],index=df.index)
或者:
df1 = (pd.DataFrame(justify(df.values, invalid_val=np.nan, side='right'), index=df.index)
.iloc[:, -2:])
df1.columns = [f'sales+{i+1}y' for i in range(len(df1.columns))]
print (df1)
sales+1y sales+2y
200012 19.12 0.98
200101 0.98 2.30
200102 0.97 0.80
200112 0.99 2.40
200201 0.98 2.50
200202 0.80 1.20
推荐阅读
- css - 如何更改 jquery 的 CSS?
- visual-studio-code - 仅查看在 vscode 中打开的文件而不是选项卡
- android - 如何在模糊背景的同时将cardview显示为dilooge
- google-cloud-platform - MWAA 中的 apache-airflow-providers-google
- reactjs - 如何遍历 JSON 数据数组中的对象并检查其名称是否包含某个字符串?
- javascript - 仅在浏览器刷新后第一次启动时按钮动画不正确
- java - 在更改变量时在 java 中扩展的正确方法
- reactjs - 无法设置状态接口并将道具传递给反应打字稿中的其他组件
- paypal - 尝试使用信用卡付款时,PayPal 结账返回无法处理的实体 - 3D 安全
- c# - .NET Maui SQLite 连接