我有一个数据框,df1
Date inp name
0 2017-08-07 2.3.6 ABC
1 2017-08-07 2.3.6 ABC
2 2017-08-08 2.3.6 TAC
3 2017-08-22 2.5.9 TTT
4 2017-09-23 0.8.0 TAC
5 2017-10-09 2.3.6 ABC
6 2017-10-09 2.3.6 TAC
7 2017-10-09 2.3.6 TAC
8 2017-10-23 0.8.0 TAC
9 2017-11-08 6.2.6 ABC
然后是另一个数据帧,df2
2.3.6ABC 2.3.6TAC 2.5.9TTT
August 2 1 0
September 0 0 0
October 1 2 0
November 0 0 1
另一个数据帧,df3
2.3.6ABC 2.3.6TAC
August 2 1
September 0 0
October 1 2
November 0 0
我想得到列中的不同值:df1的'inp',在这种情况下为4.然后,df2和df3的列数在这种情况下为3和2。如何通过重命名索引将2个数据帧的列数df2和df3存储在新数据帧中,然后在df1中获取百分比df2和df3。它应该是这样的:
noOfColumn pct
df2 as sat 3 3/4=75
df3 as nath 2 2/4=50
我无法超越这一点
st=pd.Dataframe(df1)
st=df['inp'].unique()
st2=st.count()
因为我不断得到这个:AttributeError:'numpy.ndarray'对象没有属性'count'
答案 0 :(得分:1)
根据https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.ndarray.html
的文档,我怀疑你想要的是尺寸,而不是数量size给出了ndarray中的项目数。
答案 1 :(得分:1)
维护数据框列表 -
df_list = [df2, df3]
在循环中,构建一个系列列表(还有其他方法可以做到这一点,但这里有一个),列数和索引具有名称 -
r = [
pd.Series(len(df.columns), index=['df{}'.format(i)])
for i, df in enumerate(df_list, 2)
]
或者,
r = []
for i, df in enumerate(df_list, 2):
r.append(pd.Series(len(df.columns), index=['df{}'.format(i)]))
现在,连接并计算pct
更改。此外,您希望nunique
获取唯一值的数量(unique
+ size
,因为其他答案建议不是pandaic) -
v = pd.concat(r).to_frame(name='noOfColumn')
v['pct'] = v['noOfColumn'] / df1.inp.nunique()
v
noOfColumn pct
df2 3 0.75
df3 2 0.50
另一种方法是在单独的列表中收集索引和值,并调用DataFrame
构造函数一次 -
idx, v = [], []
for i, df in enumerate(df_list, 2):
idx.append('df{}'.format(i))
v.append(len(df.columns))
最后,
df = pd.DataFrame(v, index=idx, columns=['noOfColumn'])
df['pct'] = df['noOfColumn'] / df1.inp.nunique()
df
noOfColumn pct
df2 3 0.75
df3 2 0.50