pandas 数据框包含两列“A”和“B”
A B
1 a b
2 a c d
3 x
“B”列中的每个值都是一个字符串,其中包含由空格分隔的可变数量的字母。
有没有简单的构造方法:
A B
1 a
1 b
2 a
2 c
2 d
3 x
最佳答案
您可以使用以下内容:
splitted = df.set_index("A")["B"].str.split(expand=True)
stacked = splitted.stack().reset_index(1, drop=True)
result = stacked.to_frame("B").reset_index()
print(result)
A B
0 1 a
1 1 b
2 2 a
3 2 c
4 2 d
5 3 x
有关子步骤,请参见下文:
print(splitted)
0 1 2
A
1 a b None
2 a c d
3 x None None
print(stacked)
A
1 a
1 b
2 a
2 c
2 d
3 x
dtype: object
<小时/>
或者您也可以使用pd.melt
:
splitted = df["B"].str.split(expand=True)
pd.melt(splitted.assign(A=df.A), id_vars="A", value_name="B")\
.dropna()\
.drop("variable", axis=1)\
.sort_values("A")
A B
0 1 a
3 1 b
1 2 a
4 2 c
7 2 d
2 3 x
关于python - Pandas:从列值重构数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43139930/