Python 如何在熊猫的NaN值之间均衡地重新分配值?
我有以下数据帧:Python 如何在熊猫的NaN值之间均衡地重新分配值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: 'B' 'C' 1/1/2017 'A' BTC NaN 0.367392 ETH NaN 0.367392 XRP 0.164735 0.164735 LTC 0.100481 0.100481 1/2/2017 BTC NaN 0.315265 XRP N
'B' 'C'
1/1/2017 'A'
BTC NaN 0.367392
ETH NaN 0.367392
XRP 0.164735 0.164735
LTC 0.100481 0.100481
1/2/2017 BTC NaN 0.315265
XRP NaN 0.315265
ETH NaN 0.315265
LTC 0.054204 0.054204
我想在NaN值之间平均重新分配(1-df['B'].groupby(level=0.sum())。
列“C”是预期输出的示例 这应该可以。您可以在
isnull()
from中获得有关如何计算非nan值的更多信息
不管您使用的答案是什么,始终捕捉列没有NaN值的情况。在这种情况下,两个答案都将导致除零错误
import pandas as pd
import numpy as np
test = [np.NAN,np.NAN,np.NAN,np.NAN,0.123128,0.1238123]
df = pd.DataFrame({"B":test})
df["C"] = df["B"].copy()
df["C"][df["C"].isnull()] = (1-df["B"].dropna().sum())/(len(df["B"]) - df["B"].count())
print(df)
输出:
B C
0 NaN 0.188265
1 NaN 0.188265
2 NaN 0.188265
3 NaN 0.188265
4 0.123128 0.123128
5 0.123812 0.123812
您可以使用第一级的multi-index
和sum
,通过使用sum
检查缺失值,将缺失值除以并替换为第二个计数数:
print (df)
C D
A B
1/1/2017 BTC NaN 0.367392
ETH NaN 0.367392
XRP 0.164735 0.164735
LTC 0.100481 0.100481
1/2/2017 BTC NaN 0.315265
XRP NaN 0.315265
ETH NaN 0.315265
LTC 0.054204 0.054204
sum1 = 1 - df['C'].groupby(level=0).transform('sum')
len1 = df['C'].isna().groupby(level=0).transform('sum')
df['E'] = df['C'].fillna(sum1 / len1)
print (df)
C D E
A B
1/1/2017 BTC NaN 0.367392 0.367392
ETH NaN 0.367392 0.367392
XRP 0.164735 0.164735 0.164735
LTC 0.100481 0.100481 0.100481
1/2/2017 BTC NaN 0.315265 0.315265
XRP NaN 0.315265 0.315265
ETH NaN 0.315265 0.315265
LTC 0.054204 0.054204 0.054204
什么是公式?我得到的结果有点不同。@jezrael抱歉,我给出了一个错误的公式示例。我需要(1-df['B'].groupby(level=0.sum())谢谢。很抱歉造成混乱。非常感谢您的解决方案!工作得很好!