遍历Pandas数据框中的列表并总结其他列

时间:2018-11-06 12:24:33

标签: python pandas list loops dataframe

对我来说,我要做一件棘手的事情。

我有这样的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 

说实话,我不知道从哪里开始以及如何开始,所以任何提示都受到欢迎。

预先感谢

2 个答案:

答案 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])]

它不是特别优雅,并且肯定有一种更优雅的方法可以做到这一点,但是它可以完成工作