ppr*_*mek 1 python plot dataframe pandas
我有一个输入 df:
input_ = pd.DataFrame.from_records(
[
['X_val', 'Y_val1', 'Y_val2', 'Y_val3'],
[1, 10, 11, 31],
[2, 20, 12, 21],
[3, 30, 13, 11],])
Run Code Online (Sandbox Code Playgroud)
并且想要连接每个 y 值但仍然不同,用于绘图和分析的值来自哪里,我有多个具有可变数量的 Y 列的文件,最终将它们逐列连接起来并以相乘的值扩展,但想知道是否有是一个更好的解决方案,因为我的非常乏味。
expected_output_ = pd.DataFrame.from_records(
[
['X_val', 'Y_val' 'Y_type'],
[1, 10, 'Y_val1'],
[1, 11, 'Y_val2'],
[1, 31, 'Y_val3'],
[2, 20, 'Y_val1'],
[2, 12, 'Y_val2'],
[2, 21, 'Y_val3'],
[3, 30, 'Y_val1'],
[3, 13, 'Y_val2'],
[3, 11, 'Y_val3'],])
Run Code Online (Sandbox Code Playgroud)
您可以使用pandas.DataFrame.melt:
input_.melt(
id_vars=['X_val'],
value_vars=['Y_val1', 'Y_val2', 'Y_val3'],
var_name='Y_type',
value_name='Y_val'
).sort_values(['X_val'], ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
或者,正如@Vishnudev 所建议的,您还可以使用以下变体,尤其是对于大量类似命名的Y_val*列:
input_.melt(
id_vars=['X_val'],
value_vars=input_.filter(regex='Y_val').columns,
var_name='Y_type',
value_name='Y_val'
).sort_values(['X_val'], ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
输出:
X_val Y_type Y_val
0 1 Y_val1 10
1 1 Y_val2 11
2 1 Y_val3 31
3 2 Y_val1 20
4 2 Y_val2 12
5 2 Y_val3 21
6 3 Y_val1 30
7 3 Y_val2 13
8 3 Y_val3 11
Run Code Online (Sandbox Code Playgroud)
或者,您可以根据需要重新排列列顺序。
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |