【问题标题】:Pandas: Add column information based on length of another dataframePandas:根据另一个数据框的长度添加列信息
【发布时间】:2021-11-04 05:20:32
【问题描述】:

我有两个数据框。我想通过匹配数据框 1 中的列信息,将第二个数据框的列添加到第一个数据框。

第一个数据框:dd

         BCS        libcs
0        AAA-1        1
1        ABA-1        1
2        ACD-1        1
3        AAT-1        1
4        AAR-1        1
           ...      ...
188453  TCC-61       61
188454  TTG-61       61
188455  CTG-61       61
188456  ATG-61       61
188457  TTT-61       61

print(dd.shape)
(188458, 2)

第二个数据框:df

     sample_id       DState
0    H20_AGS          AG
1    H21_AGS          AG
2    H22_BGS          BG
3    H23_AGS          AG
4    H24_CGS          CG
..   ...     ...
56    H90_DGS          DG
57    H91_DGS          DG
58    H92_BGS          BG
59    H93_BGS          BG
60    H94_CGS          CG

print(df.shape)
(61, 2)

dataframe1 的 libcs 列有 61 个唯一项,第二个数据帧有 61 行。我想根据匹配的列信息进行合并。

预期输出:

         BCS        libcs     sample_id       DState
0        AAA-1        1       H20_AGS          AG
1        ABA-1        1       H20_AGS          AG
2        ACD-1        1       H20_AGS          AG
3        AAT-1        1       H20_AGS          AG
4        AAR-1        1       H20_AGS          AG
           ...      ...
188453  TCC-61       61       H94_CGS          CG
188454  TTG-61       61       H94_CGS          CG
188455  CTG-61       61       H94_CGS          CG
188456  ATG-61       61       H94_CGS          CG
188457  TTT-61       61       H94_CGS          CG

我尝试了下面的代码,但它似乎不起作用

dd.libcs.value_counts()
dd.index = dd.groupby(level=0).cumcount()
C = dd.join(df).reset_index(drop=True)
print (C)

【问题讨论】:

  • 共同关系是dataframe2中的行数和dataframe1的column2中唯一出现的次数相同。

标签: python pandas dataframe


【解决方案1】:

您可以将df 的索引增加1 以匹配libcsmerge 的值:

df.index += 1
dd.merge(df, left_on='libcs', right_index=True)

输出:

           BCS  libcs sample_id DState
0        AAA-1      1   H20_AGS     AG
1        ABA-1      1   H20_AGS     AG
2        ACD-1      1   H20_AGS     AG
3        AAT-1      1   H20_AGS     AG
4        AAR-1      1   H20_AGS     AG
...
188453  TCC-61     61   H94_CGS     CG
188454  TTG-61     61   H94_CGS     CG
188455  CTG-61     61   H94_CGS     CG
188456  ATG-61     61   H94_CGS     CG
188457  TTT-61     61   H94_CGS     CG

【讨论】:

  • 对不起,它给出了这个错误。 ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat
  • libcs 是一个字符串吗?
  • type(dd['libcs']) Out[72]: pandas.core.series.Series
  • 宁可给出dd['libcs'].dtype的输出
  • 试试:dd.merge(df, left_on='libcs', right_on=(df.index+1).astype(str))
【解决方案2】:

使用merge

>>> dd.merge(df, left_on='libcs', right_on=(df.index+1).astype(str))

      BCS  libcs sample_id DState
0   AAA-1      1   H20_AGS     AG
1   ABA-1      1   H20_AGS     AG
2   ACD-1      1   H20_AGS     AG
3   AAT-1      1   H20_AGS     AG
4   AAR-1      1   H20_AGS     AG
5  TCC-61     61   H94_CGS     CG
6  TTG-61     61   H94_CGS     CG
7  CTG-61     61   H94_CGS     CG
8  ATG-61     61   H94_CGS     CG
9  TTT-61     61   H94_CGS     CG

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2018-12-29
    • 2023-04-08
    相关资源
    最近更新 更多