我的大部分数据都在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] 举报,一经查实,本站将立刻删除。