对我来说,我要做一件棘手的事情。
我有这样的df:
Side_a childs column1
1001 NaN 3
1002 ['1001'] 5
1003 ['1001'] 3
1004 ['1001,'1003'] 6
1005 ['1001', '1002', '1003', '1004'] 13
1006 ['1003', '1004'] 8
我想要创建一个新列,该列对出现在“子”列中的所有行的column1求和,并从column1中获得自己的值。
Column2可以说是
side_a childs column1 column2
1001 NaN 3 3
1002 ['1001'] 5 8
1003 ['1001'] 3 6
1004 ['1001','1003'] 6 12
1005 ['1001', '1002', '1003', '1004'] 13 30
1006 ['1003', '1004'] 8 17
说实话,我不知道从哪里开始以及如何开始,所以任何提示都受到欢迎。
预先感谢
答案 0 :(得分:2)
您可以使用loc
找到属于子项的行。最后,您使用apply
使用自定义函数来汇总列,例如:
def row_agg(row):
column1 = row['column1']
childs = df.loc[row['childs']]['column1'].sum() if isinstance(row['childs'],list) else 0
return column1 + childs
df = df.set_index('Side_a')
df['column2'] = df.apply(row_agg, axis=1)
df
childs column1 column2
Side_a
A NaN 3 3
B [A] 5 8
C [A] 3 6
D [A, C] 6 12
E [A, B, C, D]13 30
F [C, D] 8 17
答案 1 :(得分:1)
使用df
您上面的输入数据帧,以下代码将产生所需的输出
df.index = [str(x) for x in df['side_a']]
df['column2'] = df['column1'] + [sum(df['column1'].loc[df['childs'][i]]) if isinstance(df['childs'][i], list) else 0 for i in range(df.shape[0])]
它不是特别优雅,并且肯定有一种更优雅的方法可以做到这一点,但是它可以完成工作