Pandas 为 For 循环中的行分配新的列表值

Pandas Assign New List Value to Rows in For Loop

我需要每次通过 for 循环在列中分配一个新的列表值。我的问题是我得到了分配给所有行的最后一个列表值。换句话说,最后一个列表项出现在“Plant_Name”列的每一行中。下面的前 5 行应该在 'Plant_Name' 中显示为 Caetite I,您可以从下面的第一个列表项中看到。

我的数据框“dfn”看起来像这样 -

dfn.head()
Out[191]: 
      YYMMDD  HHMM  BestGuess(kWh)  Plant_Name
0  20180101   100         23405.0  SANTANA II
1  20180101   200         23302.0  SANTANA II
2  20180101   300         22885.0  SANTANA II
3  20180101   400         21315.0  SANTANA II
4  20180101   500         19476.0  SANTANA II

而且,最后一行看起来像这样 -

dfn.tail()
Out[190]: 
         YYMMDD  HHMM  BestGuess(kWh)  Plant_Name
26299  20201231  2000         9933.38  SANTANA II
26300  20201231  2100        19419.90  SANTANA II
26301  20201231  2200        22468.79  SANTANA II
26302  20201231  2300        22244.09  SANTANA II
26303  20210101     0        18975.02  SANTANA II

'li' 的列表值如下所示:

li
Out[192]: 
['CAETITE I',
'CAETITE II',
'CALANGO I',
'CALANGO II',
'LAGOA I',
'LAGOA II',
'SANTANA I',
'ARIZONA I',
'MEL II',
'CAETITE III',
'CALANGO III',
'CALANGO IV',
'CALANGO V',
'CALANGO VI',
'CANOAS',
'RIO DO FOGO',
'SANTANA II']

我的代码看起来像这样来创建附加列表和数据框 'dfn':

import pandas as pd
import glob
from sys import exit
import re

pd.set_option('display.max_columns', None)

path = r'\porfiler03\gtdshare\VORTEX\OBS\ALL\' # use your path

all_files = glob.glob(path + "/*BRASIL*.csv")

li = []
temp = []

count = 0
for filename in all_files:
    count = count + 1
    df = pd.read_csv(filename, index_col=None, header=0) 
    temp = re.sub(r'.*\.(.*)\.Power.*', r'', filename)
    li.append(temp) #a list of sites in order of reading files from path
    dfn = df.assign(Plant_Name=li[count-1])

exit()

IIUC:

import pandas as pd
import glob
from sys import exit
import re

pd.set_option('display.max_columns', None)

path = r'\porfiler03\gtdshare\VORTEX\OBS\ALL\' # use your path

all_files = glob.glob(path + "/*BRASIL*.csv")

dfn = pd.concat({
    re.sub(r'.*\.(.*)\.Power.*', r'', filename): pd.read_csv(filename, index_col=None, header=0)
    for filename in all_files
}, names=['Plant_Name']).reset_index('Plant_Name')


exit()