我有一个以下形式的数据框
df = pd.DataFrame({'dim_unit' :['m', 'cm', 'cm', 'm', 'ft', 'in'], 'Length' : [1,2,3,4,5,6], 'Width' : [5,6,7,8,9,10] })
我尝试使用 groupby 按不同的维度单位进行分组,然后获取子数据帧,对每个“长度”和“宽度”列应用比例因子,以便生成的数据帧具有相同的维度。 (实际的有更多单位和要转置的列)。
以下内容有效,除了我无法让它在原始数据框中更新它(显然再次重复“高度”和“米”等)。
df.groupby('dim_unit')
df.get_group('cm')[["Width"]].apply( lambda x: x*100)
我尝试使用转换而不是应用,但这似乎没有改变任何东西。我也试过了
df['len_cm_to_m']= df.get_group('cm')[["Width"]].apply( lambda x: x*100)
但这会导致一列中有很多 Nan,然后我必须对厘米、英寸、英尺等中的每一个重复,并将这些值合并到一列转换单位中。 特别是,因为我按大约 5 种不同类型的单元进行分组,并且每个单元的每个应用函数都不同,然后我正在处理多个列,所以这将为我的整个数据集创建 15 个新列有很多 Nan 值,然后我需要合并它们,这看起来很混乱。
那么,有没有办法从结果 apply 函数中更新 df 中的值?理想情况下,这将是值的更新。或者我也在考虑尝试使用合并(或类似的)通过匹配索引来更新列?
对此的任何建议都非常感谢!
不需要分组,只需将单位按比例
map
,然后相乘即可:
conversion_dict = {
"m": 100,
"cm": 1,
"ft": 12 * 2.54,
"in": 2.54
}
df[['Length','Width']] = df[['Length','Width']].mul(df['dim_unit'].map(conversion_dict), axis=0)
输出:
dim_unit Length Width
0 m 100.00 500.00
1 cm 2.00 6.00
2 cm 3.00 7.00
3 m 400.00 800.00
4 ft 152.40 274.32
5 in 15.24 25.40