递归地添加到pandas数据帧中的列表

时间:2017-09-21 11:22:10

标签: python list pandas dataframe

我正在研究在两个数据帧,站点和水库中分离的一些水电数据。

df_stations,df_reservoirs

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
       @JoinTable(name = "BOOKS_AUTHORS", 
          joinColumns = @JoinColumn(name = "author_id"),
          inverseJoinColumns = @JoinColumn(name = "book_id")) 
    @OrderColumn(name = "id")             
    List<Books> books; 

列“Number”和“R_number都引用powerstation,såseservy”X“连接到powerstation 4,因为它们具有相同的数字。我想将这些数据帧组合成一个,其中相应的数据在同一个一些站有几个水库(有些没有水库),对于这些,我想要一个包含我试图在下面显示的信息的列表。

df_combined

Name Size Number          R_Name R_Size R_number
A   20   1                  W       200      2
B   30   2                  X       300      4
C   30   3                  Y       150      2
D   35   4                  Z       100   

我已经开发了一个最小的工作示例(我为糟糕的PEP道歉)

Name Size Number R_Name R_Size R_number
A   20   1
B   30   2   W,Y   200,150   2,2
C   30   3   
D   35   4   X   300   4

这段代码会给我最后一个带有匹配编号的水库,所以只有Y用于B站。我尝试使用append代替,但这既没有错误也没有结果(我不再有代码)。

最好的解决方案可能是首先制作列表,然后是数据帧吗?

1 个答案:

答案 0 :(得分:0)

这是使用merge

的单向方式
In [2158]: df_rg = df_reservoirs.groupby('R_Number').apply(
                                  lambda x: x.astype(str).agg(','.join))

In [2159]: df_combined = df_powerstations.merge(df_rg, left_on='Number',
                                                right_index=True,
                                                how='left').fillna('')

In [2164]: df_combined
Out[2164]:
  Name  Size  Number R_name   R_size R_Number
0    A    20       1
1    B    30       2    W,Y  200,150      2,2
2    C    30       3
3    D    35       4      X      300        4

详细

In [2161]: df_rg
Out[2161]:
         R_name   R_size R_Number
R_Number
2           W,Y  200,150      2,2
4             X      300        4
              Z      100