计算数据帧字典中的行

时间:2018-08-08 10:02:45

标签: python pandas dictionary

我有一个数据框字典。我试图计算每个数据框中的行。对于真实数据,我的代码仅对只有几行的数据帧计数超过一万行。

我尝试使用伪数据重现该错误。不幸的是,该代码可以很好地处理伪数据!

import pandas as pd
import numpy  as np
import matplotlib.pyplot as plt

# Dataframe
Df = pd.DataFrame(np.random.randint(0,10,size=(100, 4)), columns=list('ABCD'))

# Map
Ma = Df.groupby('D')

# Dictionary of Dataframes
Di = {}
for name, group in Ma:
    Di[str(name)] = group

# Count the Rows in each Dataframe
Li = []
for k in Di:
    Count = Di[k].shape[0]
    Li.append([Count])

# Flatten
Li_1 = []
for sublist in Li:
    for item in sublist:
        Li_1.append(item)

# Histogram
plt.hist(Li_1, bins=10)
plt.xlabel("Rows / Dataframe")
plt.ylabel("Frequency")
fig = plt.gcf()

2 个答案:

答案 0 :(得分:2)

要获取与'D'中每个类别相对应的行数,只需在执行.size时使用groupby

Df.groupby('D').size()

pandas还允许您直接绘制图形,因此您的代码可以简化为:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Df = pd.DataFrame(np.random.randint(0,10,size=(100, 4)), columns=list('ABCD'))

Df.groupby('D').size().plot.hist()

plt.xlabel("Rows / Dataframe")
plt.ylabel("Frequency")
fig = plt.gcf()

答案 1 :(得分:1)

假定D列中的数据是分类变量。您可以使用默认countplot获取每个类别的计数。

import pandas as pd
import numpy  as np
import matplotlib.pyplot as plt
import seaborn as sns

# Dataframe
df = pd.DataFrame(np.random.randint(0,10,size=(100, 4)), columns=list('ABCD'))

# easy count plot in sns
sns.countplot(x='D',data=df)
plt.xlabel("category")
plt.ylabel("frequency")

但是,如果要查找分布图而不是分类计数图,则可以使用代码的以下部分获得分布图。

# for distribution plot
sns.distplot(df['D'],kde=False,bins=10)
plt.xlabel("Spread")
plt.ylabel("frequency")

但是,如果要按元素分组后进行分布图,这对我来说没有任何意义,但是可以使用以下方法:

# for distribution plot after group by
sns.distplot(df.groupby('D').size() ,kde=False,bins=10)
plt.xlabel("Spread")
plt.ylabel("frequency")