Nk0*_*k03 5 python dataframe python-3.x pandas pandas-groupby
这可能是重复的,但我找不到所需的答案。所以,问题是:
假设,我有一个像这样的数据框:
d1 = {'col1': [[1],[2,3]],
'col2' : [[3],[21,1]]}
df1 = pd.DataFrame(d1)
Run Code Online (Sandbox Code Playgroud)
| 第 1 列 | 列2 | |
|---|---|---|
| 0 | [1] | [3] |
| 1 | [2, 3] | [21, 1] |
现在,我们可以通过 非常轻松地垂直扩展这个数据框df1.apply(pd.Series.explode)。但是,水平方向扩展和更改列名称的最优雅的方式是什么?
像这样的东西:
d2 = {
'col1_1':[1,2],
'col1_2': [np.NAN,3],
'col2_1' : [3,21],
'col2_2' : [np.NAN,1]
}
df2 = pd.DataFrame(d2)
Run Code Online (Sandbox Code Playgroud)
输出:
| 列1_1 | 列1_2 | 列2_1 | 列2_2 | |
|---|---|---|---|---|
| 0 | 1 | 南 | 3 | 南 |
| 1 | 2 | 3.0 | 21 | 1.0 |
x = pd.concat(
[df1[c].apply(pd.Series).add_prefix(c + "_") for c in df1], axis=1
)
print(x)
Run Code Online (Sandbox Code Playgroud)
印刷:
col1_0 col1_1 col2_0 col2_1
0 1.0 NaN 3.0 NaN
1 2.0 3.0 21.0 1.0
Run Code Online (Sandbox Code Playgroud)
如果您想要从 1 开始的索引列:
x = pd.concat(
[df1[c].apply(pd.Series).add_prefix(c + "_") for c in df1], axis=1
).rename(
columns=lambda x: "{}_{}".format(x.split("_")[0], int(x.split("_")[1]) + 1)
)
print(x)
Run Code Online (Sandbox Code Playgroud)
印刷:
col1_1 col1_2 col2_1 col2_2
0 1.0 NaN 3.0 NaN
1 2.0 3.0 21.0 1.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2449 次 |
| 最近记录: |