首页 > 解决方案 > python - 如何在python列表的一个衬里中对df在列表理解中进行切片和重新采样?

问题描述

说一个列表,其中元素是 pandas df。

lst = [df1, df2, df3, df4]

每个 df 都是具有 DT 索引的时间序列。df1 & df2每 15 分钟df3 & df4有一次价值,每小时都有一次价值。我想连接所有,但在此之前我需要在df3 & df4. 首先是重新采样并更改我使用此代码所做的列的名称:

[df.resample('15min').bfill() for df in lst]  #this code works for all but, i want this only in df3 & df4- code 1


for df in lst[2:4]:
    df.resample('15min').bfill()              #this run but does nothing - code 2 

for df in lst[0:2]:                           #same column name for df1, df2  - code 3
    df.columns = ['heat']

for df in lst[2:4]:
    df.columns = ['energy']                  #same column name for df3, df4 - code 4

我需要制作一个对象来保存第二个代码的值吗?在进行切片时,是否有更好的方法将代码 1、3、4 合并到一个衬里?这与当我想用一个值除以我必须给出列表理解的每个 df 时相同,for 循环不起作用。

lst = [x/1000 for x in lst]   #this works

for x in lst:
    x.values / 1000           #this doesn't

标签: pythonpandasslice

解决方案


您似乎希望操作就地完成(这里是对差异的一个很好的描述)。

在列表推导中,操作返回存储在列表中的值。例如

for [x/1000 for x in lst]-x/1000是这样的操作吗

如果您不将操作结果存储在某处,它将不可用(可检索):

for x in lst:
    x.values / 1000

的结果x.values / 1000不存储在任何地方。但是,您可以将其放在不同的列表中,如下所示:

another_list = []
for x in lst:
    another_list.append(x.values / 1000)

然后以与列表中相同的方式x.values / 1000获得操作结果。another_listlst

因此,您遇到的问题的解决方案应该是这样的:

for df in lst[2:4]:
    df = df.resample('15min').bfill()       

推荐阅读