我正在研究在两个数据帧,站点和水库中分离的一些水电数据。
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代替,但这既没有错误也没有结果(我不再有代码)。
最好的解决方案可能是首先制作列表,然后是数据帧吗?
答案 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