2016-07-27 15 views
-1

Ich habe ein DatenPandas: Erstellen Aggregation Tabelle mit Prozent

Third party unique identifier Qsex 
9ea3e3cb6719f3d336d324c446f486bd 1 
d1b69bc4cccf0afef66debf4e3f0643e 2 
f574fc585db0cddef88306ef6f32da59 1 
8bc0a586bf0abec653c29cf4160753f9 1 
7c22b56929378ec2eb3a536b4f4bc4e0 2 
23d8433168c46d57a271a6b979037094 1 
5743b7eec1b018572b6c5b44542a67a5 2 
f176289325aa4a6fa56c0179e9cbd101 1 
c729933ff7db798ae07c59d971f40a70 1 
d12d5fc03f4c03bb85c4b39d29dbfa25 2 
442a4568d77d0f5b8a559e8eb39c03b3 1 
a0a536482e7b23956210d1cace0b5fb7 1 
c1aef06d15347ef2fbb2a8a3af1d4b85 1 
38ff613c441bf35fa4054eac88ae3cda 1 

Und ich brauche so etwas wie dieses result

zu bekommen

Ich benutze

sex = df['Qsex'].value_counts() 

und

100. * df.sex.value_counts()/len(df.sex) 

zu Prozent. Aber ich kann nicht wünschenswert bekommen

+1

Ich sehe nicht, warum man erwarten würde, dass diese beiden Linien Sie diese Ausgabe erhalten. – DeepSpace

Antwort

0

Hier ist eine Antwort, die pandas API verwendet.

Ich habe mein Bestes getan, um die Funktionsaufrufe aufzubauen, so dass Sie der Logik folgen können. Antwort inspiriert von this post.

In [1]: import pandas as pd 

In [3]: data = pd.read_csv('data.csv') 

In [4]: data 
Out[4]: 
     Third party unique identifier Qsex 
0 9ea3e3cb6719f3d336d324c446f486bd  1 
1 d1b69bc4cccf0afef66debf4e3f0643e  2 
2 f574fc585db0cddef88306ef6f32da59  1 
3 8bc0a586bf0abec653c29cf4160753f9  1 
4 7c22b56929378ec2eb3a536b4f4bc4e0  2 
5 23d8433168c46d57a271a6b979037094  1 
6 5743b7eec1b018572b6c5b44542a67a5  2 
7 f176289325aa4a6fa56c0179e9cbd101  1 
8 c729933ff7db798ae07c59d971f40a70  1 
9 d12d5fc03f4c03bb85c4b39d29dbfa25  2 
10 442a4568d77d0f5b8a559e8eb39c03b3  1 
11 a0a536482e7b23956210d1cace0b5fb7  1 
12 c1aef06d15347ef2fbb2a8a3af1d4b85  1 
13 38ff613c441bf35fa4054eac88ae3cda  1 

In [5]: data.groupby('Qsex') 
Out[5]: <pandas.core.groupby.DataFrameGroupBy object at 0x111faff98> 

In [6]: data.groupby('Qsex').count() 
Out[6]: 
     Third party unique identifier 
Qsex 
1        10 
2         4 

In [11]: data.groupby('Qsex').count() 
Out[11]: 
     Third party unique identifier 
Qsex 
1        10 
2         4 

In [14]: counts = data.groupby('Qsex').count() 

In [15]: counts['percentage'] = counts['Third party unique identifier'].apply(la 
    ...: mbda x: x/counts['Third party unique identifier'].sum()) 

In [16]: counts 
Out[16]: 
     Third party unique identifier percentage 
Qsex 
1        10 0.714286 
2         4 0.285714 

In [17]: counts['percentage'] = counts['Third party unique identifier'].apply(la 
    ...: mbda x: 100*x/counts['Third party unique identifier'].sum()) 

In [18]: counts 
Out[18]: 
     Third party unique identifier percentage 
Qsex 
1        10 71.428571 
2         4 28.571429 
+0

Wie kann ich eine solche Tabelle erstellen? Ich meine alle Namen von Spalten – ldevyataykina

+0

Ich denke, dass es hier ein Missverständnis geben kann. 'pandas' wurde entwickelt, um Ihnen beim programmatischen Arbeiten mit Ihren Daten in einer interaktiven und Scripting-Umgebung zu helfen. Wenn Sie eine Tabelle erstellen möchten, verwenden Sie am besten die Funktion '.to_csv ('filename.csv'), die von' Pandas' DataFrame-Objekten bereitgestellt wird. Ich würde empfehlen, sich die Dokumentation anzusehen. – ericmjl

0

Dieses Versuchen:

df["Sex"] = np.where(df["Qsex"] == 1, "Male", "Female") 
df2  = pd.crosstab(df.Sex, df.Qsex, margins=True) 
df3  = np.round(df2[["All"]]/df['Sex'].count()*100,2).rename(columns ={"All" :'%'}) 
pd.concat([df2[["All"]],df3], axis =1) 



    Qsex All  % 
Sex     
Female 4 28.57 
Male  10 71.43 
All  14 100.00 
+0

Wie kann ich Spalten wie auf einem Bild umbenennen? Und fügen Sie Top-Panel mit "Total" und "N" – ldevyataykina

+1

Da exportieren Sie nach Excel, tun Sie es in Excel ... – Merlin

+0

wenn die Antwort funktioniert, bitte in Betracht ziehen, es zu akzeptieren, könnten Sie auch upvote. – Merlin

Verwandte Themen