我有类似的情况,就像我的其他问题Pandas: map column using a dictionary on multiple columns 但是现在,我不想直接使用“类别”列的max()值,而是间接使用第四列“ category_name”中的“无” 与问题1中的情况相同,只是另外一列包含字符串。
import pandas as pd
f = {'company': ['Company1', 'Company1', 'Company1', 'Company1', 'Company2', 'Company2'],
'product': ['Product A', 'Product A', 'Product F', 'Product A', 'Product F', 'Product F'],
'category': ['1', 1, '3', '2', 3, '5'],
'category_name': ['a', None, 'b', 'c', None, 'd']
}
df = pd.DataFrame(f)
此处始终填充“类别”列,而“类别名称”列缺少一些值:
company product category category_name
0 Company1 Product A 1 a
1 Company1 Product A 1 None
2 Company1 Product F 3 b
3 Company1 Product A 2 c
4 Company2 Product F 3 None
5 Company2 Product F 5 d
再次,我想用值填充None / Nan,然后再次使用以下逻辑:将行的列“ category_name”与列“ category”中的最大值一起用作列1的组合。+ 2。
希望的结果是:
company product category category_name
0 Company1 Product A 1 a
1 Company1 Product A 1 **c**
2 Company1 Product F 3 b
3 Company1 Product A 2 c
4 Company2 Product F 3 **d**
5 Company2 Product F 5 d
->组合“ company1” +“产品A”的max(category)= 3->因此,对“类别名称”列中第1行的缺失值使用“ c”。
对此我也非常感谢。 非常感谢
答案 0 :(得分:0)
对category_name
使用Series.idxmax
的自定义函数,最大使用category
:
df['category'] = df['category'].astype(int)
def f(x):
s = x.set_index('category_name')['category'].idxmax()
x['category_name'] = x['category_name'].fillna(s)
return x
df = df.groupby(['company','product']).apply(f)
print (df)
company product category category_name
0 Company1 Product A 1 a
1 Company1 Product A 1 c
2 Company1 Product F 3 b
3 Company1 Product A 2 c
4 Company2 Product F 3 d
5 Company2 Product F 5 d
答案 1 :(得分:0)
`
def fnx(x):
m=x["category"].max()
val=x[x["category"]==m]["
category_name"].values
x["category_name"].fillna(val[0], in
place=True)
return x
df = df.groupby(['company','product']).apply(fnx)
`