为指定索引的 DataFrame 的第一个空列添加值

Add value to the first empty column of DataFrame for specified index

提问人:Prmake 提问时间:10/11/2023 最后编辑:marc_sPrmake 更新时间:10/12/2023 访问量:65

问:

我有一个变量列表。对于每个变量,我将变量添加到 DataFrame 的新行中,然后运行 function :resultsorder_analysis

for i in var_list:
    order_number = i
    row = (results.last_valid_index())
    new_row = row + 1
    results.loc[new_row, 'Order'] = order_number
    order_analysis()

添加新行后和之前的 DataFrame:resultsorder_analysis

   Order  Column1  Column2  Column3  Column4  Column5  Column6  Column7  Column8
0  123    NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN
 

如前所述,对于每个变量 (i) 运行。该函数至少产生 a 和 。如果 is 只是空格,则它再次运行。根据我的数据,在最多运行 4 次后,有一个(因此有 8 列)。然后它返回到循环。order_analysisNumber_ResultDate_ResultProject_Resultorder_analysisProject_Resultvar_list

def order_analysis():

    # (Majority of the function)

    # Results of the analysis:
    Number_Result = df1['Number'].loc[df1.index[indexbelow0]]
    Date_Result = df1['Date'].loc[df1.index[indexbelow0]]
    Project_Result = df1['Proj.'].loc[df1.index[indexbelow0]]

    if str.isspace(Project_Result):
        print('Number:', Number_Result)
        print('Date:', Date_Result)
        order_analysis()
   else:
       return

目前,我打印了 和 .相反,我想将这些结果添加到基于变量 (i) 添加的行的 DataFrame 中的第一个空列中。例如,变量 (123) 运行 2 次,变量 (456) 运行 4 次,变量 (789) 仅运行 1 次。然后,DataFrame 应如下所示:Number_ResultDate_Resultorder_analysisorder_analysisorder_analysisresults

   Order  Column1  Column2  Column3  Column4  Column5  Column6  Column7  Column8
0  123    Result   Result   Result   Result   NaN      NaN      NaN      NaN
0  456    Result   Result   Result   Result   Result   Result   Result   Result
0  789    Result   Result   NaN      NaN      NaN      NaN      NaN      NaN

但是,与用于查找第一个空行不同,我不知道如何在特定行上查找第一个空列。有什么想法吗?last_valid_index()

Python Pandas 数据帧

评论


答:

0赞 mozway 10/11/2023 #1

请注意,last_valid_index 也是一个 Series 方法。因此,如果你对一行进行切片,这将给你一个列索引。

也就是说,您还可以对 NA 列索引进行切片,然后使用 next 查找第一个索引(如果有的话,否则):None

col = next(iter(df.columns[df.iloc[0].isna()]), None)

或者,如果您确定存在匹配项:

col = df.columns[df.iloc[0].isna()][0]

# or
col = df.iloc[0].isna().idxmax()

输出:'Column5'