首页 > 解决方案 > Pandas:将列条目合并为一行

问题描述

我有以下数据集,其中“事务详细信息”列存储每个条目的所有值,但在不同的行中,当它应该将每个条目存储在同一行中时。有什么办法可以做到这一点,以便如果调用“事务详细信息”的第一个值,则打印出所有相关行,而不仅仅是第一行?

在此处输入图像描述

也许

标签: pythonpandasdataframe

解决方案


使用df您的数据框,您可以执行以下操作:

import numpy as np
import pandas as pd

df_new = df[~df.Date.isna()].reset_index(drop=True)
df_new["Transaction Details"] = (
    df["Transaction Details"]
        .groupby(np.where(df.Date.isna(), 0, 1).cumsum())
        .apply(lambda col: ", ".join(str(item) for item in col))
        .reset_index(drop=True)
)

仅作为说明:结果 - df_new- 对于以下数据框

df = pd.DataFrame(
    {
        "Date": [1, np.NaN, np.NaN, 2, np.NaN, np.NaN, np.NaN],
        "Transaction Details": ["a", "b", "c", "d", "e", "f", "g"]
    }
)
   Date Transaction Details
0   1.0                   a
1   NaN                   b
2   NaN                   c
3   2.0                   d
4   NaN                   e
5   NaN                   f
6   NaN                   g

   Date Transaction Details
0   1.0             a, b, c
1   2.0          d, e, f, g

如果df["Transaction Details"]只包含字符串,那么你可以替换

        .apply(lambda col: ", ".join(str(item) for item in col))

.apply(", ".join).


推荐阅读