【发布时间】:2018-12-05 13:19:30
【问题描述】:
我有一个如下所示的 pd.dataframe:
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 - 1”行的单元格值从“b”列复制到“d”列第 i 个单元格。
最后,对于“e”列,我想将“i - 1”个单元格的总和从“b”列复制到“e”列第 i 个单元格。
对于每个 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 值都在相同的行索引中。
我的方法有效,但需要很长时间,因为我的 datframe 有超过 50000 条记录,我想知道是否有不同的方法可以做到这一点,因为我有多个列,如 'a' 和 'b' 需要复制值基于 'key_value' 和一些列,这些列使用诸如 'b' 之类的列来计算值
【问题讨论】:
标签: python pandas dataframe pandas-groupby