首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pandas中有一个更好的方法,我有两个循环

在Pandas中有一个更好的方法,我有两个循环
EN

Stack Overflow用户
提问于 2015-04-26 04:00:50
回答 1查看 95关注 0票数 2

刚接触Pandas;有没有更好的方法呢?

代码语言:javascript
复制
import pandas as pd
import numpy as np
from StringIO import StringIO

devices = StringIO("""name;date;CPU;Freq;Voltage
RPI;201501;arm;700MHz;5V
Galileo;201501;intel;400MHz;3.3V
UNO;201502;atmel;16MHz;5V
""")
d = pd.DataFrame.from_csv(devices, sep=';', index_col=None)

comments = StringIO("""comment;t1;t2;t3
cool;arm;;
great!;atmel;;
great!;intel;5V;
fun;atmel;16MHz;
fun;700MHz;atmel;
""")
c = pd.DataFrame.from_csv(comments, sep=';', index_col=None)

n = d.copy()
n['cool'], n['great!'], n['fun'] = 0, 0, 0

for i, row in n.iterrows():
    for j, com in c.iterrows():
        if np.all(np.in1d(np.array(com[['t1', 't2', 't3']].dropna()), np.array(row))):
            n.loc[i, c.loc[j, 'comment']] = 1 

最后,我构建了新的DataFrame n,它看起来是这样的:

代码语言:javascript
复制
    name    date    CPU     Freq    Voltage     cool    great!  fun
0   RPI     201501  arm     700MHz  5V          1       0       0
1   Galileo 201501  intel   400MHz  3.3V        0       0       0
2   UNO     201502  atmel   16MHz   5V          0       1       1

其他df、d和c如下所示

代码语言:javascript
复制
    name    date    CPU     Freq    Voltage
0   RPI     201501  arm     700MHz  5V
1   Galileo 201501  intel   400MHz  3.3V
2   UNO     201502  atmel   16MHz   5V

    comment     t1      t2      t3
0   cool        arm     NaN     NaN
1   great!      atmel   NaN     NaN
2   great!      intel   5V      NaN
3   fun         atmel   16MHz   NaN
4   fun         700MHz  atmel   NaN

我必须使用两个循环来做这件事。这让我的熊猫梦破灭了!还有更好的吗?一定遗漏了什么..。

EN

回答 1

Stack Overflow用户

发布于 2015-04-26 05:00:09

代码语言:javascript
复制
c['val'] = 1

comments = pd.pivot_table(c,index='t1',columns='comment',
                            values='val',aggfunc=sum).fillna(0)

df = pd.merge(d,comments,left_on='CPU',right_index=True,how='left')

评论:

代码语言:javascript
复制
comment  cool  fun  great!
t1                        
700MHz      0    1       0
arm         1    0       0
atmel       0    1       1
intel       0    0       1

df:

代码语言:javascript
复制
      name    date    CPU    Freq Voltage  cool  fun  great!
0      RPI  201501    arm  700MHz      5V     1    0       0
1  Galileo  201501  intel  400MHz    3.3V     0    0       1
2      UNO  201502  atmel   16MHz      5V     0    1       1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29870083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档