JC *_*lli 9 python reshape dataframe pandas
我必须找到使用现有DataFrame创建新Dataframe的最佳方法.
查看此链接以获得完整代码:jdoodle.com/a/xKP
我有这种DataFrame:
df = pd.DataFrame({'length': [112, 214, 52,88], 'views': [10000, 50000, 25000,5000], 'click': [55, 64, 85,9]},
index = ['id1', 'id2', 'id3','id4'])
click length views
id1 55 112 10000
id2 64 214 50000
id3 85 52 25000
id4 9 88 5000
Run Code Online (Sandbox Code Playgroud)
并且需要有这样的结果:
type_stat stat
id1 click 55
id2 click 64
id3 click 85
id4 click 9
id1 length 112
id2 length 214
id3 length 52
id4 length 88
id1 views 10000
id2 views 50000
id3 views 25000
id4 views 5000
Run Code Online (Sandbox Code Playgroud)
目前,我创建了一个返回DataFrame的函数,其中包含一个stat:
def df_by_stat(current_df,stat):
current_df['type_stat'] = stat
current_df['stat'] = current_df[stat].astype(int)
return current_df[['type_stat','stat']]
Run Code Online (Sandbox Code Playgroud)
在我.append
使用这样的函数后:
def final():
return df_by_stat(df,'click').append(
df_by_stat(df,'length')).append(
df_by_stat(df,'views'))
print(final())
Run Code Online (Sandbox Code Playgroud)
这种方式是有效的,但其复杂性取决于行和列的基数太贵.这就是为什么我需要你的帮助才能找到最好的方法.
pandas.melt
将索引提升为系列后使用:
res = pd.melt(df.assign(index=df.index), id_vars='index',
value_name='stat', var_name='type_stat')\
.set_index('index')
print(res)
type_stat stat
index
id1 click 55
id2 click 64
id3 click 85
id4 click 9
id1 length 112
id2 length 214
id3 length 52
id4 length 88
id1 views 10000
id2 views 50000
id3 views 25000
id4 views 5000
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
149 次 |
最近记录: |