如何在解析数据帧的每一行时动态检索单元格的最后一个值?

how to retrieve the last value of a cell dynamically while parsing each rows of a dataframe?

我在解析我的数据帧时试图存储单元格的最后一个值,但我不知道这个值是什么,所以我需要一个动态方法来这样做。

所需的值存储在我的数据框的位置 [row, 2] 中,但在每个新行中它都会发生变化。 我想要一种在使用我的解析方法时写位置 [index, 2] 的方法。

到目前为止,我的代码看起来像这样:

value = df2.loc[(df2[2] == df2.loc[2,2]) , 2].reindex(df2.index).ffill()
code = df2.loc[df2[0] == '10', 1].reindex(df2.index).ffill()
df4 = df2.rename(columns={1: 1}) \
        .assign(Value=value, Code=code).loc[lambda x: x[0] == '50']

我尝试替换为:

value = df2.loc[(df2[2] == df2.loc[df2.index,2]) , 2].reindex(df2.index).ffill()

这行代码可以工作,但我需要确保当它检索 'value' 时,同一行的代码必须是 '10'

更进一步,这里是我的数据框示例:


>>> df2
    Code  Power/Character   value/color
0     10  Power-220         ARS
1     50  Artemis           pink
2     50  Ares              red
3     90  end               
4     10  Power-550         AZK
5     50  Artemis           blue   
6     90  end
7     10  Power-990         DLS
8     50  Zeus              grey
9     50  Kratos            white
10    90  end

预期的结果是有一个包含这些数据的数据框:

    Code  Character        Color       Power       Value
1     50  Artemis           pink       Power-220   ARS
2     50  Ares              red        Power-220   ARS
5     50  Artemis           blue       Power-550   AZK
8     50  Zeus              grey       Power-990   DLS
9     50  Kratos            white      Power-990   DLS

有什么想法吗?

Ps: 在我的代码示例中,我使用 0、1、2 作为列的名称,因为我的数据框的列还没有名称。

将您的行拆分为两个数据框:df3 用于 Code=50df4 用于 Code=10 然后合并它们:

df3 = df2.loc[df2['Code'].eq(50)].rename(columns={'Power/Character': 'Character',
                                                  'value/color': 'Color'})

df4 = df2.loc[df2['Code'].eq(10)].rename(columns={'Power/Character': 'Power',
                                                  'value/color': 'Value'})

df3 = df3.merge(df4.drop(columns='Code').reindex(df2.index).ffill(), 
                left_index=True, right_index=True, how='left')

输出:

>>> df3
   Code Character  Color      Power Value
1    50   Artemis   pink  Power-220   ARS
2    50      Ares    red  Power-220   ARS
5    50   Artemis   blue  Power-550   AZK
8    50      Zeus   grey  Power-990   DLS
9    50    Kratos  white  Power-990   DLS