python - 反转熊猫数据框中的行和列
问题描述
我试图扭转这一点,但我不知道如何。我从
>>> d = {'col1': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'], 'col2': [1, 2, 3, 4, 5, 6, 7, 7]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2
0 A 1
1 A 2
2 A 3
3 B 4
4 B 5
5 B 6
6 C 7
7 C 7
我想获得:
col1 new_1 new_2 new_3
0 A 1 2 3
1 B 4 5 6
2 C 7 7 empty
其中有基于 col1 项重复的最大次数的 new_x 列。这似乎是一个非常标准的转置,但我找不到解决方案。
如有重复请见谅。
谢谢天狼星
解决方案
它不是单行的,但可能更简单/更容易理解。
首先,聚合到一个列表列:
df_ = pd.DataFrame(df.groupby('col1').col2.agg(list))
这使
col2
col1
A [1, 2, 3]
B [4, 5, 6]
C [7, 7]
然后,从这些列表中构建一个新的 DataFrame:
df2 = (pd.DataFrame(df_.col2.tolist(), index=df_.index).add_prefix('new_')
.reset_index())
这使
col1 new_0 new_1 new_2
0 A 1 2 3.0
1 B 4 5 6.0
2 C 7 7 NaN
请注意:
- 我解释
empty
为一个空单元格,而不是'empty'
字符串 NaN
始终被视为浮点数,这就是为什么此列中的值由 pandas 转换为浮点数的原因
推荐阅读
- php - SQLSTATE[HY000]: 一般错误: 1364 字段 'care' 没有默认值
- python - 连接到服务器上运行的 virtualenv/django 时如何解决 ERR_CONNECTION_REFUSED
- r - 如何在两个变量之间传播和计算百分比变化?
- block - FTC 机器人块程序(VuForia 循环运行一次,然后 if 语句停止工作?)
- java - 从另一个类中调用一个类的方法
- python - Pandas 在多列上滚动总和
- django - 用于网络设备配置的 Django Rest Framework
- xamarin.forms - MvvmCross MvxTabbedPage 文档?
- c# - 如何使用 EntityMetadata 将查找属性复制到另一个 CRM?
- gcc - 根文件系统的交叉编译软件