下面是一個資料框,其中包含與一些記錄相關的一些摘要資訊,以及一個包含這些記錄子集的更詳細資訊的字典。實際上,DataFrame 和字典包含數千個條目,但為了簡單起見,我限制了條目。
import pandas as pd
df = pd.DataFrame({'Date': ['2022-02-14', '2022-02-14', '2022-02-14', '2022-02-14', '2022-02-14'],
'count': [10, 10, 10, 9, 9],},
index = ['NNI', 'NVEC', 'IPA', 'LYTS', 'MYN'])
df
Date count
NNI 2022-02-14 10
NVEC 2022-02-14 10
IPA 2022-02-14 10
LYTS 2022-02-14 9
MYN 2022-02-14 9
dct = {'NNI' : pd.DataFrame({'s': [-1, -1, -1],
'count': [13, 11, 10]},
index =['2007-07-13', '2019-09-18', '2016-08-01']),
'NVEC' : pd.DataFrame({'s': [-1, -1, -1],
'count': [12, 10, 9]},
index =['2012-10-09', '2018-10-01', '2022-02-01'])
}
dct
{'NNI': s count
2007-07-13 -1 13
2019-09-18 -1 11
2016-08-01 -1 10,
'NVEC': s count
2012-10-09 -1 12
2018-10-01 -1 10
2022-02-01 -1 9}
我的問題是:
如何在 DataFrame 中填充一個新列,該列ratio搜索字典中的鍵并將其與 DataFrame 的索引匹配,然后計算簡單比率:
A / B?
最好尋找一種不依賴for回圈的方法來完成此任務。
其中,
A= 字典列的出現次數count相應鍵/索引>的 DataFramecount列的值(例如,對于 NNI,這將是 2),
B=字典列的出現次數countsDataFrame>=列的值count對于相應的鍵/索引(例如對于NNI,這將是3)
所以想要的結果是:
Date s count ratio
NNI 2022-02-14 -1 10 0.6667
NVEC 2022-02-14 -1 10 0.5000
IPA 2022-02-14 -1 10 0.0000
LYTS 2022-02-14 -1 9 0.0000
MYN 2022-02-14 -1 9 0.0000
uj5u.com熱心網友回復:
您也可以使用 dict 理解。遍歷dct并比較值,將其包裝在 Series 中,然后將其包裝assign為df:
df = df.assign(ratio=pd.Series({k: v['count'].gt(df.loc[k, 'count']).sum() / v['count'].ge(df.loc[k, 'count']).sum()
for k,v in dct.items()})).fillna(0)
輸出:
Date count ratio
NNI 2022-02-14 10 0.666667
NVEC 2022-02-14 10 0.500000
IPA 2022-02-14 10 0.000000
LYTS 2022-02-14 9 0.000000
MYN 2022-02-14 9 0.000000
uj5u.com熱心網友回復:
這是一種不使用 for 回圈的方法:
(i)將它與連接dct起來。joindf
(ii) 計算ratio加入的 DataFrame 并將其連接回df.
(iii) 洗掉重復項
joined = pd.concat(dct).reset_index(level=1).join(df, lsuffix='_dct', rsuffix='')
joined['ratio'] = (joined['count_dct'].gt(joined['count']).groupby(level=0).sum()
/ joined['count_dct'].ge(joined['count']).groupby(level=0).sum())
out = pd.concat((joined.drop(columns=['level_1','s','count_dct']).drop_duplicates(), df))
out = out[~out.index.duplicated(keep='first')].fillna(0)
輸出:
Date count ratio
NNI 2022-02-14 10.0 0.666667
NVEC 2022-02-14 10.0 0.500000
IPA 2022-02-14 10.0 0.000000
LYTS 2022-02-14 9.0 0.000000
MYN 2022-02-14 9.0 0.000000
也就是說,我認為用 dict 理解來做這件事更簡單,而且可能更有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424754.html
標籤:Python python-3.x 熊猫 数据框 字典
上一篇:通過回圈頁面僅第一次寫入標題
