2017-10-16 2 views
3

Ich habe ein Dataframe von 100 Spalten und ich möchte eine Spalte ('Count') Wert mit den Spalten Position von 6 bis 74 multiplizieren. Bitte sagen Sie mir, wie das geht. Ich habe versucht,Wie multipliziert man mehrere Spalten mit einer anderen Spalte pandas

df = df.ix[0, 6:74].multiply(df["Count"], axis="index") 
df = df[df.columns[6:74]]*df["Count"] 

Keiner von ihnen arbeitet

Das Ergebnis sollte Dataframe mit allen ursprünglichen Spalten von 100 Spalten, in denen Spalten Nummer 6-74 die multiplizierten Werte in allen Zeilen haben.

+0

erneuten Ausdruck, aber Sie sollten verstehen, dass, wenn Ihre Frage beantwortet wurde, bitte die Bemühungen derer belohnen, die Ihnen geholfen. [Akzeptieren Sie die hilfreichste Antwort] (https://stackoverflow.com/help/someone-answers). Sie können auch alle anderen nützlichen Antworten aufwerten. Bitte mach es zur Gewohnheit, es hilft der Gemeinschaft. –

Antwort

3

Demo:

Probe DF:

In [6]: df = pd.DataFrame(np.random.randint(100,size=(10,10))) \ 
       .assign(Count=np.random.rand(10)) 

In [7]: df 
Out[7]: 
    0 1 2 3 4 5 6 7 8 9  Count 
0 89 38 89 68 6 32 22 12 70 69 0.225977 
1 49 1 38 33 36 93 9 57 93 64 0.030430 
2 2 53 49 79 80 86 26 22 31 41 0.629740 
3 38 44 23 29 75 42 75 19 99 57 0.980604 
4 45 2 60 74 35 77 46 43 63 55 0.136395 
5 65 97 15 16 88 59 23 68 5 21 0.648485 
6 95 90 45 75 24 32 72 76 32 75 0.703680 
7 60 31 65 85 4 36 52 72 73 94 0.744026 
8 64 96 96 15 75 22 20 68 56 39 0.500358 
9 78 54 74 29 87 57 33 97 63 37 0.289975 

Lassen Sie uns Spalten 3-6 von df['Count'] multiplizieren:

In [8]: df.iloc[:, 3:6+1] 
Out[8]: 
    3 4 5 6 
0 68 6 32 22 
1 33 36 93 9 
2 79 80 86 26 
3 29 75 42 75 
4 74 35 77 46 
5 16 88 59 23 
6 75 24 32 72 
7 85 4 36 52 
8 15 75 22 20 
9 29 87 57 33 

In [9]: df.iloc[:, 3:6+1] *= df['Count'] 

In [10]: df 
Out[10]: 
    0 1 2   3   4   5   6 7 8 9  Count 
0 89 38 89 66.681065 0.818372 20.751519 15.480964 12 70 69 0.225977 
1 49 1 38 32.359929 4.910233 60.309102 6.333122 57 93 64 0.030430 
2 2 53 49 77.467708 10.911630 55.769707 18.295685 22 31 41 0.629740 
3 38 44 23 28.437513 10.229653 27.236368 52.776014 19 99 57 0.980604 
4 45 2 60 72.564688 4.773838 49.933342 32.369289 43 63 55 0.136395 
5 65 97 15 15.689662 12.002793 38.260613 16.184644 68 5 21 0.648485 
6 95 90 45 73.545292 3.273489 20.751519 50.664974 76 32 75 0.703680 
7 60 31 65 83.351331 0.545581 23.345459 36.591370 72 73 94 0.744026 
8 64 96 96 14.709058 10.229653 14.266669 14.073604 68 56 39 0.500358 
9 78 54 74 28.437513 11.866397 36.963643 23.221446 97 63 37 0.289975 
3

Die einfachste Sache hier zu tun wäre, um die Werte zu extrahieren, multiplizieren und dann zuweisen.

u = df.iloc[0, 6:74].values 
v = df[['count']] 

df = pd.DataFrame(u * v) 
4

Unter der Annahme der gleichen Datenrahmen zur Verfügung gestellt von @MaxU

nicht einfacher, aber eine Perspektive auf, wie andere api Elemente verwenden.
pd.DataFrame.update und pd.DataFrame.mul

df.update(df.iloc[:, 3:7].mul(df.Count, 0)) 
df 

    0 1 2   3   4   5   6 7 8 9  Count 
0 89 38 89 15.366436 1.355862 7.231264 4.971494 12 70 69 0.225977 
1 49 1 38 1.004190 1.095480 2.829990 0.273870 57 93 64 0.030430 
2 2 53 49 49.749460 50.379200 54.157640 16.373240 22 31 41 0.629740 
3 38 44 23 28.437516 73.545300 41.185368 73.545300 19 99 57 0.980604 
4 45 2 60 10.093230 4.773825 10.502415 6.274170 43 63 55 0.136395 
5 65 97 15 10.375760 57.066680 38.260615 14.915155 68 5 21 0.648485 
6 95 90 45 52.776000 16.888320 22.517760 50.664960 76 32 75 0.703680 
7 60 31 65 63.242210 2.976104 26.784936 38.689352 72 73 94 0.744026 
8 64 96 96 7.505370 37.526850 11.007876 10.007160 68 56 39 0.500358 
9 78 54 74 8.409275 25.227825 16.528575 9.569175 97 63 37 0.289975 
3

von combine_first

df.iloc[:, 3:6+1].mul(df['Count'],axis=0).combine_first(df) 
Verwandte Themen