Ausgabe
Ich habe folgenden Datenrahmen:
df_ex = pd.DataFrame({
'alpha.1.try': [2,4,2.0,-0.5,6,120],
'alpha.1.test': [1, 3, 4, 2,40,11],
'alpha.1.sample': [3, 2, 3, 4,2,2],
'alpha.3.try': [6, 2.2, 7, 0,3,3],
'alpha.3.test': [12, 4, 7, -5,5,5],
'alpha.3.sample': [2, 3, 8, 2,12,8],
'alpha.5.try': [6, 2.2, 7, 0,3,3],
'alpha.5.test': [12, 4, 11, -5,5,5],
'alpha.5.sample': [2, 3, 8, 2,12,8]})
df_ex
| | alpha.1.try | alpha.1.test | alpha.1.sample | alpha.3.try | alpha.3.test | alpha.3.sample | alpha.5.try | alpha.5.test | alpha.5.sample |
|---:|--------------:|---------------:|-----------------:|--------------:|---------------:|-----------------:|--------------:|---------------:|-----------------:|
| 0 | 2 | 1 | 3 | 6 | 12 | 2 | 6 | 12 | 2 |
| 1 | 4 | 3 | 2 | 2.2 | 4 | 3 | 2.2 | 4 | 3 |
| 2 | 2 | 4 | 3 | 7 | 7 | 8 | 7 | 11 | 8 |
| 3 | -0.5 | 2 | 4 | 0 | -5 | 2 | 0 | -5 | 2 |
| 4 | 6 | 40 | 2 | 3 | 5 | 12 | 3 | 5 | 12 |
| 5 | 120 | 11 | 2 | 3 | 5 | 8 | 3 | 5 | 8 |
aber es könnte ziemlich groß sein, die Namen würden in Anzahl und Suffix variieren, .number.suffix ist eine Gruppe, die durchgehend gemittelt werden muss.
Ich möchte den Inhalt von prefix.1.suffix mit prefix.3.suffix mit prefix.5.suffix mitteln und diese Mittelwerte in eine neue Spalte prefix.135.suffix einfügen
Ich habe versucht
avg135 = df_ex.columns[(df.columns.str.contains('alpha.1') | df.columns.str.contains('alpha.3') |
df.columns.str.contains('alpha.5')].tolist()
um eine Liste von Spalten zu erstellen, um den Datenrahmen zu schneiden, da es mehr als die hier gezeigten Header geben könnte und ich die Option haben möchte, eine Teilmenge auszuwählen. Aber der Rest, ähnliche Suffixe zu gruppieren und sie zu mitteln, liegt ein bisschen außerhalb meiner Programmierkenntnisse.
Lösung
Sie können MultiIndex verwenden:
# Split each column header into a 3-tuple, e.g.: ("alpha", "1", "try"),
# ("alpha", "1", "test"), etc.
df_ex.columns = pd.MultiIndex.from_tuples([col.split(".") for col in df_ex.columns])
# Group by prefix and suffix and take the mean of each column group
result = df_ex.groupby(level=[0,2], axis=1).mean()
# Rename the resulting columns
result.columns = [f"{a}.135.{b}" for a, b in result.columns]
Beantwortet von – Code anders
Antwort geprüft von – Gilberto Lyons (FixError Admin)