简体   繁体   English

熊猫:连接数据帧

[英]Pandas: concatenate dataframes

I have 2 dataframe 我有2个数据帧

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

and

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

I need to concatenate that And get 我需要连接并得到

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

And next I want to divide values in col (count_sec_target / count_sec_random) * 100% But when I try to concatenate df 接下来我想在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

Also I try df = df1.append(df2) BUt I get wrong result. 另外我尝试df = df1.append(df2) BUt我得错了结果。 How can I fix that? 我该如何解决这个问题?

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

在此输入图像描述


Setup Reference 设置参考

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]

Merge should be appropriate here: 合并在这里应该是合适的:

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

图片


To get the division output, simply do: 要获得除法输出,只需执行以下操作:

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

where: df is the merged DF 其中: df是合并的DF

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM