Pandas DataFrame 的异常重塑
Unusual reshaping of Pandas DataFrame
我有一个这样的DF:
df = pd.DataFrame({'x': ['a', 'a', 'b', 'b', 'b', 'c'],
'y': [1, 2, 3, 4, 5, 6],
})
看起来像:
x y
0 a 1
1 a 2
2 b 3
3 b 4
4 b 5
5 c 6
我需要以保持 'x' 列唯一的方式重塑它:
x y_1 y_2 y_3
0 a 1 2 NaN
1 b 3 4 5
2 c 6 NaN NaN
所以 'y_N' 列的最大 N 必须等于
max(df.groupby('x').count().values)
并且 x 列必须包含唯一值。
目前我不知道如何获取 y_N 列。
谢谢。
您可以使用 pandas.crosstab
和 cumcount
列作为 columns
参数:
(pd.crosstab(df.x, df.groupby('x').cumcount() + 1, df.y,
aggfunc = lambda x: x.iloc[0])
.rename(columns="y_{}".format).reset_index())
我有一个这样的DF:
df = pd.DataFrame({'x': ['a', 'a', 'b', 'b', 'b', 'c'],
'y': [1, 2, 3, 4, 5, 6],
})
看起来像:
x y
0 a 1
1 a 2
2 b 3
3 b 4
4 b 5
5 c 6
我需要以保持 'x' 列唯一的方式重塑它:
x y_1 y_2 y_3
0 a 1 2 NaN
1 b 3 4 5
2 c 6 NaN NaN
所以 'y_N' 列的最大 N 必须等于
max(df.groupby('x').count().values)
并且 x 列必须包含唯一值。
目前我不知道如何获取 y_N 列。
谢谢。
您可以使用 pandas.crosstab
和 cumcount
列作为 columns
参数:
(pd.crosstab(df.x, df.groupby('x').cumcount() + 1, df.y,
aggfunc = lambda x: x.iloc[0])
.rename(columns="y_{}".format).reset_index())