中位数 IF S 使用 Python Pandas 的分组
MEDIAN IF S using groupby of Python Pandas
我正在尝试 运行 中位数 IF NOT EQUAL 到列引用。我可以按 运行 中位数分组。但是,我无法通过不等于在列中引用 value/character 来 运行 中位数组。
import pandas as pd
# intialise data of lists.
data={'id':[ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
'var1':['var1','var1','var1','var1','var1','var1','var1','var1','var1','var1','var2','var2','var2','var2','var2'],
'var2':[ 'A','A','A','B','B','B','C','C','C','A','A','A','B','B','C'],
'var3':[ 'A','A','A','A','A','A','A','A','A','A','A','A','A','A','A'],
'values':[ 10,870,1731,80,110,3848,3590,344,30,60,60,190,440,780,1460]}
#Create DataFrame
df=pd.DataFrame(data)
Excel Formula:-
=MEDIAN(IF($B:$B=H2,IF($C:$C<>$I2,$E:$E)))
Column reference:
B - var1 (input), H - grouped var1 (below output var1), C - var2(Input), I - (below output var2), E - values in input file.
Desired Output -
var1,var2,median
var1,A,227
var1,B,344
var1,C,110
var2,A,780
var2,B,190
var2,C,315
我正在尝试编写 Median IF S。上面提供了 Excel 中使用的公式。
编辑 - 完全重写了这个答案。
根据你的 data 字典,我想你想要这个。
import pandas as pd
df = pd.DataFrame(data)
res = {'input1': [], 'input2': [], 'results': []}
for i1, i2 in zip(set(data['var1']), set(data['var2'])):
temp = df[(df['var1'] == i1) & (df['var2'] == i2)]
row_median = temp['values'].median()
res['input1'].append(i1)
res['input2'].append(i2)
res['results'].append(row_median)
print(pd.DataFrame(res))
我正在尝试 运行 中位数 IF NOT EQUAL 到列引用。我可以按 运行 中位数分组。但是,我无法通过不等于在列中引用 value/character 来 运行 中位数组。
import pandas as pd
# intialise data of lists.
data={'id':[ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
'var1':['var1','var1','var1','var1','var1','var1','var1','var1','var1','var1','var2','var2','var2','var2','var2'],
'var2':[ 'A','A','A','B','B','B','C','C','C','A','A','A','B','B','C'],
'var3':[ 'A','A','A','A','A','A','A','A','A','A','A','A','A','A','A'],
'values':[ 10,870,1731,80,110,3848,3590,344,30,60,60,190,440,780,1460]}
#Create DataFrame
df=pd.DataFrame(data)
Excel Formula:-
=MEDIAN(IF($B:$B=H2,IF($C:$C<>$I2,$E:$E)))
Column reference:
B - var1 (input), H - grouped var1 (below output var1), C - var2(Input), I - (below output var2), E - values in input file.
Desired Output -
var1,var2,median
var1,A,227
var1,B,344
var1,C,110
var2,A,780
var2,B,190
var2,C,315
我正在尝试编写 Median IF S。上面提供了 Excel 中使用的公式。
编辑 - 完全重写了这个答案。
根据你的 data 字典,我想你想要这个。
import pandas as pd
df = pd.DataFrame(data)
res = {'input1': [], 'input2': [], 'results': []}
for i1, i2 in zip(set(data['var1']), set(data['var2'])):
temp = df[(df['var1'] == i1) & (df['var2'] == i2)]
row_median = temp['values'].median()
res['input1'].append(i1)
res['input2'].append(i2)
res['results'].append(row_median)
print(pd.DataFrame(res))