如何在解析数据帧的每一行时动态检索单元格的最后一个值?
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=50
和 df4
用于 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
我在解析我的数据帧时试图存储单元格的最后一个值,但我不知道这个值是什么,所以我需要一个动态方法来这样做。
所需的值存储在我的数据框的位置 [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=50
和 df4
用于 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