【问题标题】:add dataframes columns names to rows after join procedure连接过程后将数据框列名称添加到行
【发布时间】:2022-09-28 07:50:56
【问题描述】:

我有以下数据框:

df1 = pd.DataFrame({\'ID\'    : [\'T1002.\', \'T5006.\', \'T5007.\'],
                    \'Parent\': [\'Stay home.\', \"Stay home.\",\"Stay home.\"],
                    \'Child\' : [\'2Severe weather.\', \"5847.\", \"Severe weather.\"]})



      ID    Parent       Child
0   T1002.  Stay home.  2Severe weather.
1   T5006.  Stay home.  5847.
2   T5007.  Stay home.  Severe weather.

我想将两列合二为一,并将列名称添加到行中。我还希望列名以粗体显示。

预期结果:(我不能将列名 ID 等加粗)

             Joined_columns()
0   ID: T1002.  Parent: Stay home.   Child: 2Severe weather.
1   ID: T5006.  Parent: Stay home.   Child: 5847.
2   ID: T5007.  Parent: Stay home.   Child: Severe weather.

连接是通过以下代码完成的:

df1_final=df1.stack().groupby(level=0).apply(\' \'.join).to_frame(0)

但我不确定如何走到最后。有任何想法吗

    标签: python python-3.x pandas dataframe join


    【解决方案1】:

    尝试这个 :

    col_= df.columns[0]
    col_list = list(df.columns)
    col_list.remove(col_)
    [ col_ := col_+'_'+ col for col in col_list ]
    
    df = pd.DataFrame(df.stack(level=0))
    df.reset_index(inplace=True)
    df[col_] = df['level_1']+ ' : ' + df[0].astype(str) + ' '
    df = df[['level_0',col_]]
    df = df.groupby('level_0').sum()
    df.reset_index(inplace=True,drop=True)
    

    【讨论】:

    • 谢谢你这个作品。但是,正如我在描述中所说的那样“我也希望列名以粗体显示”。您可以将其添加到您的解决方案中吗?
    • 另外,您可以在代码中添加一些 cmets 吗?尤其是前三行
    【解决方案2】:

    要获取列名,可以使用.name

    >>> df1.apply(lambda sr: f'{sr.name}: ' + sr).apply(' '.join, axis=1).to_frame('Joined_columns()')
    

    输出:

                                            Joined_columns()
    0  ID: T1002. Parent: Stay home. Child: 2Severe weather.
    1             ID: T5006. Parent: Stay home. Child: 5847.
    2   ID: T5007. Parent: Stay home. Child: Severe weather.
    

    使列加粗取决于您使用什么来显示它们。例如,** 常用于表示大胆的在降价语言中,<b>...</b> 标签用于 HTML。

    >>> print(df1.apply(lambda sr: f'**{sr.name}**: ' + sr).apply(' '.join, axis=1).to_string(index=False))
    

    输出:

    ID: T1002。家长: 呆在家里。孩子: 2恶劣的天气。

    ID: T5006。家长: 呆在家里。孩子: 5847。

    ID: T5007。家长: 呆在家里。孩子: 恶劣天气。

    或者

    >>> print(df1.apply(lambda sr: f'<b>{sr.name}</b>: ' + sr).apply(' '.join, axis=1).to_string(index=False))
    

    输出:

    ID: T1002。家长: 呆在家里。孩子: 2恶劣的天气。ID: T5006。家长: 呆在家里。孩子: 5847。ID: T5007。家长: 呆在家里。孩子: 恶劣天气。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多