【发布时间】:2020-04-13 04:26:01
【问题描述】:
我正在尝试根据 f1_ty、f2_ty、f3_ty 的值将 f1_am、f2_am、f3_am 移动到对应的列
我开始使用集合根据 _ty 中的唯一值向数据框添加新列,但我试图弄清楚如何将 _am 值移动到它所属的位置
寻找 group by 和 pivot 的选项,但结果让我大吃一惊....
我将不胜感激。
代码下方。
import pandas as pd
import numpy as np
data = {
'mem_id': ['A', 'B', 'C', 'A', 'B', 'C']
, 'date_inf': ['01/01/2019', '01/01/2019', '01/01/2019', '02/01/2019', '02/01/2019', '02/01/2019']
, 'f1_ty': ['ABC', 'ABC', 'ABC', 'ABC', 'GHI', 'GHI']
, 'f1_am': [100, 20, 57, 44, 15, 10]
, 'f2_ty': ['DEF', 'DEF', 'DEF', 'GHI', 'ABC', 'XYZ']
, 'f2_am':[20, 30, 45, 66, 14, 21]
, 'f3_ty': ['XYZ', 'GHI', 'OPQ', 'OPQ', 'XYZ', 'DEF']
, 'f3_am':[20, 30, 45, 66, 14, 21]
}
df = pd.DataFrame (data)
#distinct values in columns using sets
distinct_values = sorted(list(set(df['f1_ty'])|set(df['f2_ty'])|set(df['f3_ty'])))
# add distinct values as new columns in the DataFrame
new_df = df.reindex(columns = np.append( df.columns.values, distinct_values))
【问题讨论】:
-
您是否需要:
m=df.set_index(['mem_id','date_inf']),然后是m[sorted(m.columns,key=lambda x:x.split('_')[1])].reset_index()? 评论,因为我的要求不是很清楚 -
添加图片更清晰
标签: python-3.x pandas pivot-table pandas-groupby