[英]Pandas: Adding suffix to column names programmatically while dropping out common columns after concat
[英]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.