dun*_*bok 6 python dataframe pandas
我有 pandas DataFrameA。我正在努力将其转换为我想要的格式,请参阅DataFrameB。我尝试过pivot或melt但我不确定如何使其成为有条件的(string值 to FIELD_STR_VALUE,numeric值 to FIELD_NUM_VALUE)。我希望你能为我指明正确的方向。
A:输入数据框
|FIELD_A |FIELD_B |FIELD_C |FIELD_D |
|--------|--------|--------|--------|
|123123 |8 |a |23423 |
|123124 |7 |c |6464 |
|123144 |99 |x |234 |
Run Code Online (Sandbox Code Playgroud)
B:所需的输出数据帧
|ID |FIELD_A |FIELD_NAME |FIELD_STR_VALUE |FIELD_NUM_VALUE |
|---|--------|-----------|----------------|----------------|
|1 |123123 |B | |8 |
|2 |123123 |C |a | |
|3 |123123 |D | |23423 |
|4 |123124 |B | |7 |
|5 |123124 |C |c | |
|6 |123124 |D | |6464 |
|7 |123144 |B | |99 |
|8 |123144 |C |x | |
|9 |123144 |D | |234 |
Run Code Online (Sandbox Code Playgroud)
您可以使用:
# dic = {np.int64: 'NUM', object: 'STR'}
(df.set_index('FIELD_A')
.pipe(lambda d: d.set_axis(pd.MultiIndex.from_arrays(
[d.columns, d.dtypes],
# or for custom NAMES
#[d.columns, d.dtypes.map(dic)],
names=['FIELD_NAME', None]),
axis=1)
)
.stack(0).add_prefix('FIELD_').add_suffix('_VALUE')
.reset_index()
)
Run Code Online (Sandbox Code Playgroud)
注意。如果您确实想要 STR/NUM,map则来自 dtypes 的那些字符串(请参阅代码中的注释)。
输出:
FIELD_A FIELD_NAME FIELD_int64_VALUE FIELD_object_VALUE
0 123123 FIELD_B 8.0 NaN
1 123123 FIELD_C NaN a
2 123123 FIELD_D 23423.0 NaN
3 123124 FIELD_B 7.0 NaN
4 123124 FIELD_C NaN c
5 123124 FIELD_D 6464.0 NaN
6 123144 FIELD_B 99.0 NaN
7 123144 FIELD_C NaN x
8 123144 FIELD_D 234.0 NaN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |