I have a pd.dataframe that looks like this:
key_value a b c d e
value_01 1 10 x NaN NaN
value_01 NaN 12 NaN NaN NaN
value_01 NaN 7 NaN NaN NaN
value_02 7 4 y NaN NaN
value_02 NaN 5 NaN NaN NaN
value_02 NaN 6 NaN NaN NaN
value_03 19 15 z NaN NaN
现在根据key_value的值,
对于列'a'和'c',我想要基于key_value从相同列'a'和'c'中复制最后一个单元格的值。
对于另一列'd',我想要将第'i'个单元格中的值从列'b'复制到列'd'中的第'i-1'个单元格。
最后,对于列'e',我想要将第'i'个单元格中的值从列'b'中第'i-1'个单元格的总和复制到列'e'中。
对于每个key_value,列'a'、'b'和'c'在第一行都有一些值,基于这些值复制或生成不同列的值。
key_value a b c d e
value_01 1 10 x NaN NaN
value_01 1 12 x 10 10
value_01 1 7 x 12 22
value_02 7 4 y NaN NaN
value_02 7 5 y 4 4
value_02 7 6 y 5 9
value_03 8 15 z NaN NaN
我的现有方法:
size = df.key_value.size
for i in range(size):
if pd.isna(df.a[i]) and df.key_value[i] == output.key_value[i - 1]:
df.a[i] = df.a[i - 1]
df.c[i] = df.c[i - 1]
df.d[i] = df.b[i - 1]
df.e[i] = df.e[i] + df.b[i - 1]
对于 'a' 和 'b' 等列,NaN 值都在同一行索引中。
我的方法可行,但是因为我的数据框记录超过了50000条,所以处理时间很长,我想知道是否有另一种不同的方法来做到这一点,因为我有多个类似于'a'和'b'的列,需要基于 'key_value' 复制值,并且一些列的值是使用诸如 'b' 列之类的列进行计算的。
f
的列?你看到我的问题了吗?如果在 i == 3 时,列 f 的单元格值应该是列 f 在 i == 2 时的单元格值加1? - piRSquareddef h(g):
目前正在对除assign
中指定的列以外的所有列执行ffill()
操作,那么我该如何排除某些列使其不受任何操作影响呢? - user9996043