簡體   English   中英

在帶有通用后綴的變量名的熊貓中工作

[英]Working in Pandas with variable names with a common suffix

我在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公司各自的美國與世界之比。 我知道如何在python中做很長的路要走-我只為每個公司做這件事:

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

但是,我將如何執行而不必寫出每個方程式? 我在想我可以做點什么

    for x in [a,b,c]:

或者我可以定義一個函數。 但是,我對實現這些選項甚至對搜索內容以尋找答案的了解都不多(因為我確信之前已經有人問過)。 在SAS中,我只寫一個填充company的宏。

謝謝。

您可以首先使用str索引通過列的第一個char查找unique值:

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

如果列用_ splited (對於實際數據更好), 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  

您應該使用MultiIndex http://pandas.pydata.org/pandas-docs/stable/advanced.html

您應該閱讀本節,但您的具體情況可以是:

df = pandas.DataFrame(np.random.rand(10, 6), columns=pandas.MultiIndex.from_product([['us', 'ww'], ['a', 'b', 'c']]))

ratio = df['us']/ df['ww']

結果是一個具有3列a,b,c和3個請求比率的數據幀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM