2016-09-21 178 views
2

我有2个数据帧熊猫:串联dataframes

category count_sec_target 
3D-шутеры 0.09375 
Cериалы 201.90625 
GPS и ГЛОНАСС 0.015625 
Hi-Tech 187.1484375 
Абитуриентам 0.8125 
Авиакомпании 8.40625 

category count_sec_random 
3D-шутеры 0.369565217 
Hi-Tech 70.42391304 
АСУ ТП, промэлектроника 0.934782609 
Абитуриентам 1.413043478 
Авиакомпании 14.93478261 
Авто 480.3369565 

我需要连接这一点,得到

category count_sec_target count_sec_random 
3D-шутеры 0.09375 0.369565217 
Cериалы 201.90625 0 
GPS и ГЛОНАСС 0.015625 0 
Hi-Tech 187.1484375 70.42391304 
Абитуриентам 0.8125 1.413043478 
Авиакомпании 8.40625 14.93478261 
АСУ ТП, промэлектроника 0 0.934782609 
Авто 0  480.3369565 

而接下来我想在山坳(count_sec_target/count_sec_random) * 100%划分值 但是,当我尝试连接df

frames = [df1, df1] 
df = pd.concat(frames) 
I get 
category count_sec_random count_sec_target 
0      3D-шутеры   0.369565    NaN 
1       Hi-Tech   70.423913    NaN 
2   АСУ ТП, промэлектроника   0.934783    NaN 
3      Абитуриентам   1.413043    NaN 
4      Авиакомпании   14.934783    NaN 

另外我试试df = df1.append(df2) BUt我得到了错误的结果。 我该如何解决这个问题?

+0

也许你需要为了得到您想要使用pd.merge输出 – user1017373

回答

5
df3 = pd.concat([d.set_index('category') for d in frames], axis=1).fillna(0) 
df3['ratio'] = df3.count_sec_random/df3.count_sec_target 
df3 

enter image description here


安装参考

import pandas as pd 
from StringIO import StringIO 

t1 = """category;count_sec_target 
3D-шутеры;0.09375 
Cериалы;201.90625 
GPS и ГЛОНАСС;0.015625 
Hi-Tech;187.1484375 
Абитуриентам;0.8125 
Авиакомпании;8.40625""" 

t2 = """category;count_sec_random 
3D-шутеры;0.369565217 
Hi-Tech;70.42391304 
АСУ ТП, промэлектроника;0.934782609 
Абитуриентам;1.413043478 
Авиакомпании;14.93478261 
Авто;480.3369565""" 

df1 = pd.read_csv(StringIO(t1), sep=';') 
df2 = pd.read_csv(StringIO(t2), sep=';') 

frames = [df1, df2] 
+0

你可以说,我怎样才能把下一列分到另一列呢? –

+0

@PetrPetrov我已经更新了我的文章 – piRSquared

+0

,我需要在左边列'index' –

4

合并应该在这里是合适的:

df_1.merge(df_2, on='category', how='outer').fillna(0) 

Image


要获得分频输出,简单地做:

df['division'] = df['count_sec_target'].div(df['count_sec_random']) * 100 

其中:df是合并后的DF

+1

我只是想补充一点;-)同意,这样更合适。 – piRSquared