递归添加到pandas datafram中的列表

2024-09-28 01:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看一些水电站和水库两个数据帧分离的数据。在

东风加油站、东风水库

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   

“编号”和“Rå编号”列都参考了发电站,så水库“X”与4号发电站相连,因为它们具有相同的编号。我想把这些数据帧合并成一个,其中对应的数据在同一行上。有些电台有几个水库(有些没有),对于这些我想要一个清单,其中的信息,我已经试图在下面显示。在

df_组合

^{pr2}$

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

import pandas as pd

df_powerstations = pd.DataFrame([['A', 20,1],['B',30,2],['C',30,3],['D',35,4]], columns=['Name','Size','Number'])
df_reservoirs = pd.DataFrame([['W', 200, 2],['X', 300, 4],['Y',150,2],['Z',100, '']], columns=['R_name', 'R_size', 'R_Number'])

R_cols = df_reservoirs.columns.values.tolist()
df_combined = pd.concat([df_powerstations, pd.DataFrame(columns=R_cols)]) # type: pd.DataFrame

for ps_ind, ps_num in enumerate(df_combined['Number']):
    for r_ind, r_ps_num in enumerate(df_reservoirs['R_Number']):
        if ps_num == r_ps_num:
            df_combined.loc[ps_ind, R_cols] = df_reservoirs.loc[r_ind, R_cols].copy()

这段代码将给我最后一个带有匹配编号的库,因此只有Y代表B站。我尝试使用append,但这既没有错误也没有结果(我不再有那个代码)。在

最好的解决方案是先列出列表,然后再生成数据帧吗?在


Tags: columns数据namenumberdataframedfsizenum
1条回答
网友
1楼 · 发布于 2024-09-28 01:28:29

{1>这里使用

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

细节

^{pr2}$

相关问题 更多 >

    热门问题