Python 反转数据帧中的行和列
我正试图扭转这一局面,但我不知道如何扭转。 我从Python 反转数据帧中的行和列,python,pandas,Python,Pandas,我正试图扭转这一局面,但我不知道如何扭转。 我从 >>> 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
>>> 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项的最大重复次数,存在新的_x列。
这似乎是一个相当标准的转置,但我找不到解决方案
抱歉,如果重复
Thx
Sirius在设置索引后使用.cumcount()
和.unstack()
cumcount()
代码的其余部分是获取目标数据帧,您也可以使用pivot和crosstab来实现这一点
df1 = df.set_index([df.groupby('col1').cumcount() + 1,
df['col1']]).drop('col1',1)\
.unstack(0)\
.droplevel(0,1)\
.add_prefix('new_')\
.fillna('empty')\
.reset_index()
或使用枢轴:
(df.assign(k=df.groupby("col1").cumcount()+1).pivot('col1','k','col2')
.add_prefix("col_").reset_index())
它不是一行,但可能更简单/更容易理解
首先,聚合到一个列表列:
df_uzy=pd.DataFrame(df.groupby('col1').col2.agg(列表))
给
col2
col1
A [1, 2, 3]
B [4, 5, 6]
C [7, 7]
col1 new_0 new_1 new_2
0 A 1 2 3.0
1 B 4 5 6.0
2 C 7 7 NaN
然后,根据以下列表构建一个新的数据帧:
df2=(pd.DataFrame(df_u.col2.tolist(),index=df_u.index)。添加前缀('new_u'))
.reset_index())
给
col2
col1
A [1, 2, 3]
B [4, 5, 6]
C [7, 7]
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
始终被视为浮点数,这就是熊猫将此列中的值强制转换为浮点数的原因
输出:
0 1 2 3 4 5 6 7
col1
A 1.0 2.0 3.0 0.0 0.0 0.0 0.0 0.0
B 0.0 0.0 0.0 4.0 5.0 6.0 0.0 0.0
C 0.0 0.0 0.0 0.0 0.0 0.0 7.0 7.0
empty
表示没有值,还是的“empty”字符串?:-)@anky你可以随时编辑我的答案我的朋友:)