Pandas:在列值之间插入 return 索引名称
Pandas: interpolate between column values to return index name
我想 return 以下代码中的 index name
和 cost
。我认为我走在正确的轨道上,但不确定如何推进,我附上了我的代码和输出
编辑:我愿意改变我这样做的方式。
比如a
在test_data
,应该return'a': 'rep_asp_art', '1000000'
import pandas as pd
treatments = {'min_asp_art': {'treat': 'min', 'mat': 'asp', 'class': 'art',
'hci': 85, 'cost': 100000},
'maj_asp_art': {'treat': 'maj', 'mat': 'asp', 'class': 'art',
'hci': 60, 'cost': 350000},
'rep_asp_art': {'treat': 'maj', 'mat': 'asp', 'class': 'art',
'hci': 0, 'cost': 1000000},
'min_asp_col': {'treat': 'min', 'mat': 'asp', 'class': 'col',
'hci': 85, 'cost': 100000},
'maj_asp_col': {'treat': 'maj', 'mat': 'asp', 'class': 'col',
'hci': 60, 'cost': 350000},
'rep_asp_col': {'treat': 'maj', 'mat': 'asp', 'class': 'col',
'hci': 0, 'cost': 1000000},
'min_chip_col': {'treat': 'min', 'mat': 'chip', 'class': 'col',
'hci': 70, 'cost': 30000},
'maj_chip_col': {'treat': 'maj', 'mat': 'chip', 'class': 'col',
'hci': 50, 'cost': 80000},
'rep_chip_col': {'treat': 'maj', 'mat': 'chip', 'class': 'col',
'hci': 0, 'cost': 100000},
'min_chip_loc': {'treat': 'min', 'mat': 'chip', 'class': 'loc',
'hci': 70, 'cost': 30000},
'maj_chip_loc': {'treat': 'maj', 'mat': 'chip', 'class': 'loc',
'hci': 45, 'cost': 80000},
'rep_chip_loc': {'treat': 'maj', 'mat': 'chip', 'class': 'loc',
'hci': 0, 'cost': 100000},
}
ndf = pd.DataFrame(treatments)
ndf = ndf.round(3)
dft = ndf.T
def get_treatment(material, func_class, hci):
return dft[(dft['mat'] == material) &
(dft['class'] == func_class) &
(dft['hci'].astype(int) >= hci)].index
test_data = {'a': {'mat': 'asp', 'class': 'art', 'hci': 35},
'b': {'mat': 'asp', 'class': 'art', 'hci': 90},
'c': {'mat': 'asp', 'class': 'col', 'hci': 68},
'd': {'mat': 'asp', 'class': 'art', 'hci': 5},
'e': {'mat': 'chip', 'class': 'col', 'hci': 55},
'f': {'mat': 'chip', 'class': 'loc', 'hci': 95},
'g': {'mat': 'asp', 'class': 'art', 'hci': 15},
'h': {'mat': 'asp', 'class': 'art', 'hci': 70},
'i': {'mat': 'asp', 'class': 'art', 'hci': 3}
}
for k, v in test_data.items():
res = get_treatment(v['mat'], v['class'], v['hci'])
print (k, res)
# Output:
# a Index(['min_asp_art', 'maj_asp_art'], dtype='object')
# b Index([], dtype='object')
# c Index(['min_asp_col'], dtype='object')
# d Index(['min_asp_art', 'maj_asp_art'], dtype='object')
# e Index(['min_chip_col'], dtype='object')
# f Index([], dtype='object')
# g Index(['min_asp_art', 'maj_asp_art'], dtype='object')
# h Index(['min_asp_art'], dtype='object')
# i Index(['min_asp_art', 'maj_asp_art'], dtype='object')
就这样?
def get_treatment(material, func_class, hci):
return dft[(dft['mat'] == material) &
(dft['class'] == func_class) &
(dft['hci'].astype(int) >= hci)]['cost']
# test_data = ... #
for k, v in test_data.items():
res = get_treatment(v['mat'], v['class'], v['hci'])
print (k, res, '\n')
输出:
> a min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object
> b Series([], Name: cost, dtype: object)
> c min_asp_col 100000
> Name: cost, dtype: object
> d min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object
> e min_chip_col 30000
> Name: cost, dtype: object
> f Series([], Name: cost, dtype: object)
> g min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object
> h min_asp_art 100000
> Name: cost, dtype: object
> i min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object
我想 return 以下代码中的 index name
和 cost
。我认为我走在正确的轨道上,但不确定如何推进,我附上了我的代码和输出
编辑:我愿意改变我这样做的方式。
比如a
在test_data
,应该return'a': 'rep_asp_art', '1000000'
import pandas as pd
treatments = {'min_asp_art': {'treat': 'min', 'mat': 'asp', 'class': 'art',
'hci': 85, 'cost': 100000},
'maj_asp_art': {'treat': 'maj', 'mat': 'asp', 'class': 'art',
'hci': 60, 'cost': 350000},
'rep_asp_art': {'treat': 'maj', 'mat': 'asp', 'class': 'art',
'hci': 0, 'cost': 1000000},
'min_asp_col': {'treat': 'min', 'mat': 'asp', 'class': 'col',
'hci': 85, 'cost': 100000},
'maj_asp_col': {'treat': 'maj', 'mat': 'asp', 'class': 'col',
'hci': 60, 'cost': 350000},
'rep_asp_col': {'treat': 'maj', 'mat': 'asp', 'class': 'col',
'hci': 0, 'cost': 1000000},
'min_chip_col': {'treat': 'min', 'mat': 'chip', 'class': 'col',
'hci': 70, 'cost': 30000},
'maj_chip_col': {'treat': 'maj', 'mat': 'chip', 'class': 'col',
'hci': 50, 'cost': 80000},
'rep_chip_col': {'treat': 'maj', 'mat': 'chip', 'class': 'col',
'hci': 0, 'cost': 100000},
'min_chip_loc': {'treat': 'min', 'mat': 'chip', 'class': 'loc',
'hci': 70, 'cost': 30000},
'maj_chip_loc': {'treat': 'maj', 'mat': 'chip', 'class': 'loc',
'hci': 45, 'cost': 80000},
'rep_chip_loc': {'treat': 'maj', 'mat': 'chip', 'class': 'loc',
'hci': 0, 'cost': 100000},
}
ndf = pd.DataFrame(treatments)
ndf = ndf.round(3)
dft = ndf.T
def get_treatment(material, func_class, hci):
return dft[(dft['mat'] == material) &
(dft['class'] == func_class) &
(dft['hci'].astype(int) >= hci)].index
test_data = {'a': {'mat': 'asp', 'class': 'art', 'hci': 35},
'b': {'mat': 'asp', 'class': 'art', 'hci': 90},
'c': {'mat': 'asp', 'class': 'col', 'hci': 68},
'd': {'mat': 'asp', 'class': 'art', 'hci': 5},
'e': {'mat': 'chip', 'class': 'col', 'hci': 55},
'f': {'mat': 'chip', 'class': 'loc', 'hci': 95},
'g': {'mat': 'asp', 'class': 'art', 'hci': 15},
'h': {'mat': 'asp', 'class': 'art', 'hci': 70},
'i': {'mat': 'asp', 'class': 'art', 'hci': 3}
}
for k, v in test_data.items():
res = get_treatment(v['mat'], v['class'], v['hci'])
print (k, res)
# Output:
# a Index(['min_asp_art', 'maj_asp_art'], dtype='object')
# b Index([], dtype='object')
# c Index(['min_asp_col'], dtype='object')
# d Index(['min_asp_art', 'maj_asp_art'], dtype='object')
# e Index(['min_chip_col'], dtype='object')
# f Index([], dtype='object')
# g Index(['min_asp_art', 'maj_asp_art'], dtype='object')
# h Index(['min_asp_art'], dtype='object')
# i Index(['min_asp_art', 'maj_asp_art'], dtype='object')
就这样?
def get_treatment(material, func_class, hci):
return dft[(dft['mat'] == material) &
(dft['class'] == func_class) &
(dft['hci'].astype(int) >= hci)]['cost']
# test_data = ... #
for k, v in test_data.items():
res = get_treatment(v['mat'], v['class'], v['hci'])
print (k, res, '\n')
输出:
> a min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object
> b Series([], Name: cost, dtype: object)
> c min_asp_col 100000
> Name: cost, dtype: object
> d min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object
> e min_chip_col 30000
> Name: cost, dtype: object
> f Series([], Name: cost, dtype: object)
> g min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object
> h min_asp_art 100000
> Name: cost, dtype: object
> i min_asp_art 100000
> maj_asp_art 350000
> Name: cost, dtype: object