Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在熊猫的NaN值之间均衡地重新分配值?_Python_Pandas_Dataframe - Fatal编程技术网

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())谢谢。很抱歉造成混乱。非常感谢您的解决方案!工作得很好!