[英]Count null/NaN values in a dataframe across columns
我正在嘗試計算數據幀列中每行的唯一值的數量。
這是當前的數據幀:
[in] df
[out]
PID CID PPID PPPID PPPPID PPPPPID
0 2015-01-02 456 2014-01-02 2014-01-02 2014-01-02 2014-01-02
1 2015-02-02 500 2014-02-02 2013-02-02 2012-02-02 2012-02-10
2 2010-12-04 300 2010-12-04 2010-12-04 2010-12-04 2010-12-04
除CID(contract_ID)之外的所有列都是日期時間。 我想在數據框中添加另一列,計算每行中唯一日期時間的數量(以便找出“鏈”中有多少合約)。
我嘗試過.sum()
.count()
和.sum()
方法的不同實現,但不能讓它們逐行工作(輸出是所有具有相同值的行)。
例:
df_merged['COUNT'] = df_merged2.count(axis=1)
當我希望每行不同時,用'6'填充整個'COUNT'列。
刪除axis=1
參數會使整個列'NaN'
您需要apply(your_func, axis=1)
才能逐行工作。
df
Out[19]:
PID CID PPID PPPID PPPPID PPPPPID
0 2015-01-02 456 2014-01-02 2014-01-02 2014-01-02 2014-01-02
1 2015-02-02 500 2014-02-02 2013-02-02 2012-02-02 2012-02-10
2 2010-12-04 300 2010-12-04 2010-12-04 2010-12-04 2010-12-04
df['counts'] = df.drop('CID', axis=1).apply(lambda row: len(pd.unique(row)), axis=1)
Out[20]:
PID CID PPID PPPID PPPPID PPPPPID counts
0 2015-01-02 456 2014-01-02 2014-01-02 2014-01-02 2014-01-02 2
1 2015-02-02 500 2014-02-02 2013-02-02 2012-02-02 2012-02-10 5
2 2010-12-04 300 2010-12-04 2010-12-04 2010-12-04 2010-12-04 1
[3 rows x 7 columns]
另一種方法是在df的轉置上調用unique
:
In [26]:
df['counts'] = df.drop('CID', axis=1).T.apply(lambda x: len(pd.Series.unique(x)))
df
Out[26]:
PID CID PPID PPPID PPPPID PPPPPID counts
0 2015-01-02 456 2014-01-02 2014-01-02 2014-01-02 2014-01-02 2
1 2015-02-02 500 2014-02-02 2013-02-02 2012-02-02 2012-02-10 5
2 2010-12-04 300 2010-12-04 2010-12-04 2010-12-04 2010-12-04 1
您可以直接在nunique
上使用DataFrame
。 這是從pd.__version__ == u'0.20.0'
開始。
In [169]: df['counts'] = df.drop('CID', axis=1).nunique(axis=1)
In [170]: df
Out[170]:
PID CID PPID PPPID PPPPID PPPPPID counts
0 2015-01-02 456 2014-01-02 2014-01-02 2014-01-02 2014-01-02 2
1 2015-02-02 500 2014-02-02 2013-02-02 2012-02-02 2012-02-10 5
2 2010-12-04 300 2010-12-04 2010-12-04 2010-12-04 2010-12-04 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.