串联并按组填充NaN值

2024-05-15 07:44:42 发布

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

我有这个数据帧:

df:
companycode    name    address    A     B     C     ...
1234           asd     qwe,56     Tyh   123   923
1234           asd     qwe,56     Zfhs  4828  01992
6472           yui     iop,56     Retgh 8484  8484
...

我还有一个像这样的:

df2:
companycode    A     B     C       ...
1234           Jid   4123  141
6472           Low   1312  3234
...

单个公司代码的名称和地址始终相同

我想以这样的方式连接、连接、合并或附加它们:

companycode    name    address    A     B     C     ...
1234           asd     qwe,56     Tyh   123   923
1234           asd     qwe,56     Zfhs  4828  01992
6472           yui     iop,56     Retgh 8484  8484
1234           asd     qwe,56     Jid   4123  141
6472           yui     iop,56     Low   1312  3234
...

由于单个公司代码的名称和地址总是相同的,基本上我想用axis=0中的df连接df2,并将原始df公司代码中的名称和地址拉到新行。写起来很混乱,但我认为视觉效果更好。你知道吗

你知道我该怎么做吗?你知道吗


Tags: 代码name名称dfaddress地址公司yui
2条回答

对于那些有SQL思维方式的人,可以考虑使用mergeconcat(即,JOINUNION):

mdf = df1[['companycode', 'name', 'address']]\ 
              .merge(df2, on='companycode').drop_duplicates()
finaldf = pd.concat([df1, mdf]).reset_index(drop=True)

print(finaldf)
#    companycode name address      A     B     C
# 0         1234  asd  qwe,56    Tyh   123   923
# 1         1234  asd  qwe,56   Zfhs  4828  1992
# 2         6472  yui  iop,56  Retgh  8484  8484
# 3         1234  asd  qwe,56    Jid  4123   141
# 4         6472  yui  iop,56    Low  1312  3234

pd.concat后跟一个groupby操作就可以了。你知道吗

df = pd.concat([df1, df2], 0, ignore_index=True)\
                          .groupby('companycode').ffill()
df

       A     B     C address  companycode name
0    Tyh   123   923  qwe,56         1234  asd
1   Zfhs  4828  1992  qwe,56         1234  asd
2  Retgh  8484  8484  iop,56         6472  yui
3    Jid  4123   141  qwe,56         1234  asd
4    Low  1312  3234  iop,56         6472  yui

  • ignore_index=True设置为在连接时创建新索引
  • 串联在df2列中留下以前不存在的NaN
  • companycode执行groupby操作,然后对ffill执行NaN操作,用同一组的正确值填充这些NaN。你知道吗

相关问题 更多 >