熊猫:连接数据帧

时间:2016-09-21 09:54:36

标签: python pandas dataframe

我有2个数据帧

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

接下来我要在col (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) 我错了结果。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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