将 pandas DataFrame 列添加到行的最佳方法
Best way to add pandas DataFrame column to row
我必须找到使用现有 DataFrame 创建新 DataFrame 的最佳方法。
查看此 link 以获得完整代码: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
并且需要得到这个结果:
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
目前,我创建了一个 return DataFrame 函数,只有一个统计数据:
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']]
在我用这样的函数创建 .append
之后:
def final():
return df_by_stat(df,'click').append(
df_by_stat(df,'length')).append(
df_by_stat(df,'views'))
print(final())
这种方法可行,但它的复杂性取决于行和列的基数 太昂贵了。
这就是为什么我需要你的帮助来找到最好的方法。
在将索引提升到系列后使用 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
我必须找到使用现有 DataFrame 创建新 DataFrame 的最佳方法。
查看此 link 以获得完整代码: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
并且需要得到这个结果:
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
目前,我创建了一个 return DataFrame 函数,只有一个统计数据:
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']]
在我用这样的函数创建 .append
之后:
def final():
return df_by_stat(df,'click').append(
df_by_stat(df,'length')).append(
df_by_stat(df,'views'))
print(final())
这种方法可行,但它的复杂性取决于行和列的基数 太昂贵了。 这就是为什么我需要你的帮助来找到最好的方法。
在将索引提升到系列后使用 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