Wie rufe ich den Wert der Spalte Z und ihren Durchschnitt ab, wenn ein Wert> 1 ist?

data=[9,2,3,4,5,6,7,8]
df = pd.DataFrame(np.random.randn(8, 5),columns=['A', 'B', 'C', 'D','E'])
fd=pd.DataFrame(data,columns=['Z'])

df=pd.concat([df,fd], axis=1)

l=[]
for x,y in df.iterrows():
    for i,s in y.iteritems():
        if s >1:
            l.append(x)
            print(df['Z'])    

Die erwartete Ausgabe ist höchstwahrscheinlich ein Wörterbuch mit dem Spaltennamen als Schlüssel und dem Durchschnitt von Z als Werten.

1
J.J. 17 Jän. 2019 im 20:53

3 Antworten

Beste Antwort

Verwenden eines Wörterbuchverständnisses:

res = {col: df.loc[df[col] > 1, 'Z'].mean() for col in df.columns[:-1]}
# {'A': 9.0, 'B': 5.0, 'C': 8.0, 'D': 7.5, 'E': 6.666666666666667}

Setup für oben verwendet:

np.random.seed(0)
data = [9,2,3,4,5,6,7,8]
df = pd.DataFrame(np.random.randn(8, 5),columns=['A', 'B', 'C', 'D','E'])
fd = pd.DataFrame(data, columns=['Z'])
df = pd.concat([df, fd], axis=1)
1
jpp 17 Jän. 2019 im 18:08

Ich weiß nicht, ob ich Ihre Frage richtig verstanden habe, aber meinen Sie das so:

import pandas as pd
import numpy as np

data=[9,2,3,4,5,6,7,8]
columns = ['A', 'B', 'C', 'D','E']
df = pd.DataFrame(np.random.randn(8, 5),columns=columns)
fd=pd.DataFrame(data,columns=['Z'])

df=pd.concat([df,fd], axis=1)
print('df = \n', str(df))

anyGreaterThanOne = (df[columns] > 1).any(axis=1)
print('anyGreaterThanOne = \n', str(anyGreaterThanOne))
filtered = df[anyGreaterThanOne]
print('filtered = \n', str(filtered))
Zmean = filtered['Z'].mean()
print('Zmean = ', str(Zmean))

Ergebnis:

    df = 
           A         B         C         D         E  Z
0 -2.170640 -2.626985 -0.817407 -0.389833  0.862373  9
1 -0.372144 -0.375271 -1.309273 -1.019846 -0.548244  2
2  0.267983 -0.680144  0.304727  0.302952 -0.597647  3
3  0.243549  1.046297  0.647842  1.188530  0.640133  4
4 -0.116007  1.090770  0.510190 -1.310732  0.546881  5
5 -1.135545 -1.738466 -1.148341  0.764914 -1.140543  6
6 -2.078396  0.057462 -0.737875 -0.817707  0.570017  7
7  0.187877  0.363962  0.637949 -0.875372 -1.105744  8

anyGreaterThanOne = 
 0    False
1    False
2    False
3     True
4     True
5    False
6    False
7    False
dtype: bool

filtered = 
           A         B         C         D         E  Z
3  0.243549  1.046297  0.647842  1.188530  0.640133  4
4 -0.116007  1.090770  0.510190 -1.310732  0.546881  5

Zmean =  4.5
1
godfryd 17 Jän. 2019 im 18:16

Meinst du das?

df[df['Z']>1].loc[:,'Z'].mean(axis=0) 

Oder

df[df['Z']>1]['Z'].mean()
1
aerijman 17 Jän. 2019 im 18:07