python - 将 panda 中一列的多行整理为一行,同时保持列的数据类型

标签 python pandas

我有一只 Pandas ,有几列这样的

username A time place
AAA      B 1    YYY
AAA      C 2    YYY
AAA      D 1    YYY
AAA      B 3    ZZZ
AAA      C 4    ZZZ
AAA      B 3    ZZZ
BBB      B 1    YYY
BBB      C 2    YYY
BBB      D 1    YYY
BBB      B 7    ZZZ
BBB      C 8    ZZZ
BBB      B 9    ZZZ
CCC      B 6    YYY
CCC      C 5    YYY
CCC      D 8    YYY
CCC      B 7    ZZZ
CCC      C 8    ZZZ
CCC      B 9    ZZZ

在上面的 panda 中,除了 time 之外的所有列都是字符串。 TIME 是一个浮点列。

我正在尝试创建一个序列,以便对于每个用户名,我希望将用户名的所有行整理到一行。输出数据框希望看起来像这样。

username A           time        place
AAA      B+C+D+B+C+B 1+2+1+3+4+3 YYY+YYY+YYY+ZZZ+ZZZ+ZZZ
BBB      B+C+D+B+C+B 1+2+1+7+8+9 YYY+YYY+YYY+ZZZ+ZZZ+ZZZ
CCC      B+C+D+B+C+B 6+5+8+7+8+9 YYY+YYY+YYY+ZZZ+ZZZ+ZZZ

我使用“+”作为分隔符,但它可以是通常用于分隔符的任何字符(例如,/\..等)

我已经能够使用

对所有列执行此操作
df.groupby('username')['A].apply('+',join).reset_index()

所有列都相同。我终于合并了所有单独的 df` 以获得我想要的形式。

对于时间列,我可以做,但我希望获得一个 float 类型的列。我很难做到这一点。希望更有知识的人可以指导我。

我什至尝试在事后更改输出列 df['时间'].astype(float)

但我得到的都是 NaN。

最佳答案

我相信您需要使用 agg 将所有列转换为字符串:

df = df.astype(str).groupby('username', as_index=False).agg('+'.join)
print (df)
  username            A                     time                    place
0      AAA  B+C+D+B+C+B  1.0+2.0+1.0+3.0+4.0+3.0  YYY+YYY+YYY+ZZZ+ZZZ+ZZZ
1      BBB  B+C+D+B+C+B  1.0+2.0+1.0+7.0+8.0+9.0  YYY+YYY+YYY+ZZZ+ZZZ+ZZZ
2      CCC  B+C+D+B+C+B  6.0+5.0+8.0+7.0+8.0+9.0  YYY+YYY+YYY+ZZZ+ZZZ+ZZZ

如果需要求和数字列并通过+字符串列连接:

df = (df.groupby('username', as_index=False)
       .agg(lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else '+'.join(x)))
print (df)
  username            A  time                    place
0      AAA  B+C+D+B+C+B  14.0  YYY+YYY+YYY+ZZZ+ZZZ+ZZZ
1      BBB  B+C+D+B+C+B  28.0  YYY+YYY+YYY+ZZZ+ZZZ+ZZZ
2      CCC  B+C+D+B+C+B  43.0  YYY+YYY+YYY+ZZZ+ZZZ+ZZZ

关于python - 将 panda 中一列的多行整理为一行,同时保持列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53243419/

相关文章:

python - 在windows python 3.6上安装tensorflow

python - 创建一个自动填充空值的函数

python - 如何连接两个 Pandas 系列的对应值?

python - read_csv 读取分类值?

python - Pandas/Python - 使用 stack() groupby() 和 apply() 的性能非常慢

python - Linux -OpenWrt- (Unwired One) python wlan接口(interface)扫描错误

python - 从 python 调用 c 程序时将数组传递给子进程模块的问题

python - django 中 OneToOneField 的数据迁移

python - 致命的 Python 错误 : failed to get random numbers to initialize Python

python - 如何将 pandas DataFrame 中的列取消嵌套(分解)为多行