【发布时间】:2017-08-29 08:05:52
【问题描述】:
我已经尝试了所有我能找到的关于该主题的解决方案,所有这些都不适用于“就地”数据框,并且乘法从未发生过。
所以这就是我想要做的: 我有一个包含许多测量值的多级列数据框。每列的顺序如下:
数据:
MeasurementType
Value Unit Type
StudyNumber
1 1.0 m/s a
2 1.7 m/s v
3 10.5 cm/s b
我正在尝试将所有单位为 m/s 的测量值转换为 cm/s,即我需要过滤所有单位为 m/s 的值,将它们乘以 10,然后更改单位列中的单位。
我管理了过滤器,但是当我对其执行乘法(直接乘以 *10、.mul(10) 或进行新分配)时,它不会粘住。之后打印数据框显示值没有变化。
代码如下:
unit_df = data.iloc[:, data.columns.get_level_values(1)=='Unit']
unit_col_list = []
for unitcol in unit_df.columns:
unitget = unit_df[unitcol][unit_df[unitcol].notnull()].unique()
if unitget.size > 1:
unit_col_list.append(unitcol)
unit_col_list = [item[0] for item in unit_col_list] #so I get the header of the column
data_wrongunits = data[unit_col_list]
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']*=10
或
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value'].mul(10)
或
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']=data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']*10
过滤器为我提供了一系列值列。也许另一种结构会有所帮助?
【问题讨论】:
-
first answer 的内容有帮助吗?您对元素的访问看起来有问题。尽量使用loc,尽量避免使用
df[][][],而是使用df.loc[conditions] -
我更新了我的评论,使用
loc访问项目并且不要链接括号 -
谢谢,实际上这解决了问题! @Quickbeam2k1
-
我认为,由于重复链接,警告没有提出,虽然这看起来有点奇怪。很高兴我能帮上忙。请注意,您可以对 cmets 和答案进行投票,并在合适的情况下接受答案。
标签: python pandas multiplication