2016-09-21 104 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