Pandas - 将 DataFrame 值除以 MultiIndex DataFrame 中的系列
Posted
技术标签:
【中文标题】Pandas - 将 DataFrame 值除以 MultiIndex DataFrame 中的系列【英文标题】:Pandas - divide DataFrame values by a Series in a MultiIndex DataFrame 【发布时间】:2019-08-02 01:09:55 【问题描述】:假设我有一个像这样的多索引 DataFrame:
import numpy as np
import pandas as pd
ix = pd.MultiIndex.from_product([['bucket 1', 'bucket 2'], ['q1', 'q2', 'q3']])
col = ['col1', 'col2', 'col3']
df = pd.DataFrame(np.random.randn(6, 3), ix, col)
输出:
col1 col2 col3
bucket 1 q1 0.061384 0.364194 -1.502486
q2 0.562352 -0.044836 0.242474
q3 0.373411 -0.678429 -1.261984
bucket 2 q1 0.884109 -0.070899 0.085305
q2 -0.010463 1.463259 -0.572882
q3 -0.419821 -0.916151 0.032110
现在我创建一个系列,其索引与我的 DataFrame 的列匹配:
s = pd.Series([1,2,3], index=["col1", "col2", "col3"])
我可以将 DataFame 中 bucket 1
中的值除以系列,如下所示:
df.loc["bucket 1"].div(s)
输出:
col1 col2 col3
q1 0.061384 0.182097 -0.500829
q2 0.562352 -0.022418 0.080825
q3 0.373411 -0.339214 -0.420661
但是,如果我尝试使用此计算来使用 .loc
在 DataFrame 中设置值,它只会创建 NaN:
df.loc["bucket 1"] = df.loc["bucket 1"].div(s)
输出:
col1 col2 col3
bucket 1 q1 NaN NaN NaN
q2 NaN NaN NaN
q3 NaN NaN NaN
bucket 2 q1 0.884109 -0.070899 0.085305
q2 -0.010463 1.463259 -0.572882
q3 -0.419821 -0.916151 0.032110
我做错了什么?如何在 DataFrame 中进行计算?
【问题讨论】:
您需要只将一组除以s
,还是最终将其应用于整个DataFrame
?
在我的真实用例中,我将有一个不同的系列来划分每个桶。
【参考方案1】:
只需使用.values
设置值:
df.loc["bucket 1"]=df.loc["bucket 1"].div(s).values
print(df)
col1 col2 col3
bucket 1 q1 -0.149856 0.220604 -0.048464
q2 -0.791260 -0.199646 0.148115
q3 -0.712257 -0.264074 -0.266497
bucket 2 q1 -1.120164 -0.290546 0.577589
q2 -0.149522 -0.221203 -0.566872
q3 -1.002036 -2.233220 -1.206849
【讨论】:
谢谢!我觉得很奇怪,直到今天,您还不能就地替换 DataFrame 的一部分。你需要.values
。【参考方案2】:
你只是错过了[]
df.loc[["bucket 1"]]=df.loc[["bucket 1"]].div(s)
df
Out[1092]:
col1 col2 col3
bucket 1 q1 -1.016733 -1.334495 0.417621
q2 0.892984 -0.329325 0.224591
q3 1.438399 -0.094883 0.053133
bucket 2 q1 -0.062476 0.962616 0.457755
q2 0.389670 1.238829 0.390253
q3 0.713873 -0.034645 -0.148381
【讨论】:
以上是关于Pandas - 将 DataFrame 值除以 MultiIndex DataFrame 中的系列的主要内容,如果未能解决你的问题,请参考以下文章
python 将字典值映射到Pandas中的Dataframe值(Python)
将字典值增量添加到 pandas DataFrame。具有dict键列名的DataFrame
pandas使用fillna函数将dataframe中缺失值替换为空字符串(replace missing value with blank string in dataframe)