微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 使用带有公共后缀的变量名在Pandas中工作

我的大部分数据都在SAS中工作,但需要在特定项目中使用python(我在python中不是很称职).我有这样的数据帧:

    values = ['a_us', 'b_us', 'c_us', 'a_ww','b_ww','c_ww']
    df = pd.DataFrame(np.random.rand(1, 6), columns=values[:6])

我需要做的一件事是计算每个公司a,b和c的US与WW的比率.我知道如何在python中实现这一目标 – 我只是为每个公司做到这一点:

    df['*company*_ratio'] = df['*company*_us']/df['*company*_ww']

但是,如何在不写出每个等式的情况下如何做到这一点呢?我想我可以做点什么

    for x in [a,b,c]:

或者我可以定义一个函数.但是,我不太了解这些选项中的任何一个,甚至不知道要搜索什么来找到答案(因为我确信以前曾经问过).在SAS中,我只会编写一个填充公司的宏.

谢谢.

解决方法:

您可以在indexing with str之前按列的第一个字符查找unique值:

print df.columns.str[0].unique()
['a' 'b' 'c']

或者通过第一个子串,如果列是splited _(更好地用于实际数据).

print df.columns.str.split('_').str[0].unique()
['a' 'b' 'c']

for x in df.columns.str[0].unique():
    df[x + '_ratio'] = df[x + '_us']/df[x + '_ww']

比较:

import pandas as pd
import numpy as np

np.random.seed(0)
values = ['a_us', 'b_us', 'c_us', 'a_ww','b_ww','c_ww']
df = pd.DataFrame(np.random.rand(1, 6), columns=values[:6])

df['a_ratio'] = df['a_us']/df['a_ww']
df['b_ratio'] = df['b_us']/df['b_ww']
df['c_ratio'] = df['c_us']/df['c_ww']
print df
       a_us      b_us      c_us      a_ww      b_ww      c_ww   a_ratio  \
0  0.548814  0.715189  0.602763  0.544883  0.423655  0.645894  1.007213   

    b_ratio   c_ratio  
0  1.688142  0.933223  

与:

import pandas as pd
import numpy as np

np.random.seed(0)
values = ['a_us', 'b_us', 'c_us', 'a_ww','b_ww','c_ww']
df = pd.DataFrame(np.random.rand(1, 6), columns=values[:6])

for x in df.columns.str[0].unique():
    df[x + '_ratio'] = df[x+'_us']/df[x+'_ww']
print df
       a_us      b_us      c_us      a_ww      b_ww      c_ww   a_ratio  \
0  0.548814  0.715189  0.602763  0.544883  0.423655  0.645894  1.007213   

    b_ratio   c_ratio  
0  1.688142  0.933223  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐