Условное замещение данных в пандах и усечение по столбцам

Создайте файл с именем «gradle.properties» в этом каталоге:

C:\Users\[user]\.gradle

И поместите на него этот код:

org.gradle.daemon=true

это уменьшит время сборки градиента.

1
задан CPfeif13 18 January 2019 в 21:13
поделиться

2 ответа

Вы можете отобразить символы для каждого из столбцов, а затем принять набор ненулевых значений.

df = fn1.apply(lambda x: x.map(fn1['Symbol'].to_dict()))
condition_symbols =  {col:sorted(list(set(fn1_symbols[col].dropna()))) for col in fn1.columns[1:]}

Это даст вам словарь:

{'Condition1': ['B', 'D'],
 'Condition2': ['C', 'H'],
 'Condition3': ['D', 'H', 'J'],
 'Condition4': ['D', 'G', 'H', 'K']}

Я знаю, что вы запросили Dataframe, но, поскольку длина каждого списка различна, не имеет смысла превращать его в Dataframe. Если вам нужен Dataframe, вы можете просто запустить этот код:

pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in condition_symbols.items() ]))

Это даст вам следующий вывод:

            Condition1  Condition2  Condition3  Condition4
0           B           C           D           D
1           D           H           H           G
2           NaN         NaN         J           H
3           NaN         NaN         NaN         K
0
ответ дан Joe Patten 18 January 2019 в 21:13
поделиться

Другим ответом будет нарезка, как показано ниже (пояснения в комментариях):

import numpy as np
import pandas as pd

df = pd.DataFrame.from_dict({
    "Symbol": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"],
    "Condition1": [1, np.nan, 3, np.nan, np.nan, np.nan, 7, np.nan, np.nan, 8, 12],
    "Condition2": [np.nan, 2, 2, 7, np.nan, np.nan, 5, 11, 14, np.nan, np.nan],
    }
)


new_df = pd.concat(
    [
        df["Symbol"][df[column].notnull()].reset_index(drop=True) # get columns without null and ignore the index (as your output suggests)
        for column in list(df)[1:] # Iterate over all columns except "Symbols"
    ],
    axis=1, # Column-wise concatenation
)
# Rename columns
new_df.columns = list(df)[1:]
# You can leave NaNs or replace them with empty string, your choice
new_df.fillna("", inplace=True)

Результатом этой операции будет:

  Condition1 Condition2
0          a          b
1          c          c
2          g          d
3          j          g
4          k          h
5                     i

Если вам нужны какие-либо дополнительные разъяснения, оставьте комментарий внизу.

0
ответ дан Szymon Maszke 18 January 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: