Автоматизируйте процесс удаления похожих столбцов и переноса данных в Python. - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть код, который содержит несколько столбцов, и я хочу удалить определенные столбцы, а затем транспонировать оставшиеся данные.Раньше я делал это вручную, но у меня большой набор данных, поэтому я не смогу сделать это вручную.Это данные и столбцы этого типа, которые я хочу удалить (выделит их):

enter image description here

После удаления выделенных столбцов я хочу выполнить транспонированиеиз rule_id (я преобразовал rule_id в индекс), и столбцы 'comp', а затем преобразуем эти данные в фрейм данных.Могу ли я автоматизировать этот процесс?Если да, то как.Это код, который я использую:

    dfs = []
for tx in dframe2['tx_id']:
    df = pd.read_csv('%s.csv' % tx)
    df1 = df.groupby('rule_id')['request_id'].value_counts().unstack().fillna(0)
    #dfs.append(df1)
    m = df1.eq(df1.shift(-1, axis=1))

    arr1 = np.select([df1 ==0, m], [np.nan, df1], df1*100)

    dft4 = pd.DataFrame(arr1, index=df1.index).rename(columns=lambda x: 'comp{}'.format(x+1))

    dft5 = df1.join(dft4)
    #dfs.append(dft5)
    cols = [c for c in dft5.columns if '-' in c]
    df8 = dft5.drop(cols, axis=1)
    df9 = df8.transpose()
    #print(df9)
    dfs.append(df9)

Конечный результат должен выглядеть следующим образом:

enter image description here

Это своего родаследующий вопрос к Автоматизировать процесс сравнения значений 2 CSV-файлов, если значения совпадают, прочитать второй CSV-файл в DataFrame

После применения вашего кода @Frenchy, я получаю такой результат:

enter image description here

Но я хочу, чтобы все rule_id в одной строке вверху, а затем значения comp, как показано здесь:

enter image description here

1 Ответ

0 голосов
/ 27 февраля 2019

образец решения:

df = pd.DataFrame({'rule_id': [50014, 50238, 53139],
              'comp1': [100, np.nan, 100],
               '0f1410-0440-0123':[0,1,2],
              'comp2': [np.nan,np.nan, np.nan],
              'd10-0440-0123':[0,1,2],
              'comp3': [np.nan,100, np.nan]})

print(df)

#delete columns which contains '-' in name
cols = [c for c in df.columns if '-' in c]
df.drop(cols, axis=1, inplace=True)

df.set_index('rule_id', inplace=True)
df = df.transpose()
print(df)

Начальный DF:

  rule_id  comp1  0f1410-0440-0123  comp2  d10-0440-0123  comp3
0    50014  100.0                 0    NaN              0    NaN
1    50238    NaN                 1    NaN              1  100.0
2    53139  100.0                 2    NaN              2    NaN

Конечный DF:

rule_id  50014  50238  53139
comp1    100.0    NaN  100.0
comp2      NaN    NaN    NaN
comp3      NaN  100.0    NaN

надеюсь, что поможет !!

для второго вопроса, сгруппируйте все DFs

df1 = pd.DataFrame({'rule_id': [50014, 50238, 53139],
          'comp1': [100, 100, 100],
          'comp2': [100,100, 100],
          'comp3': [1.0,1.0, 1.0]})

df2 = pd.DataFrame({'rule_id': [50028, 50258, 53339],
          'comp1': [1.0, 1.0, 100],
          'comp2': [100,np.nan, 100]})

df3 = pd.DataFrame({'rule_id': [50030, 50259, 53340, 53342],
          'comp1': [1.0, 1.0, 100, 200],
          'comp2': [100,100, 100, 200],
          'comp3': [100,100, 100, 200],
          'comp4': [1.0,np.nan, 1.0, np.nan]})

df1.set_index('rule_id', inplace=True)
df1 = df1.transpose()
df2.set_index('rule_id', inplace=True)
df2 = df2.transpose()
df3.set_index('rule_id', inplace=True)
df3 = df3.transpose()

listofdftransposed = [df1,df2,df3] #-> list of df as my result of extend job
df_result = pd.concat(listofdftransposed)
print(df_result)

output:

rule_id  50014  50028  50030  50238  50258  50259  53139  53339  53340  53342
comp1    100.0    NaN    NaN  100.0    NaN    NaN  100.0    NaN    NaN    NaN
comp2    100.0    NaN    NaN  100.0    NaN    NaN  100.0    NaN    NaN    NaN
comp3      1.0    NaN    NaN    1.0    NaN    NaN    1.0    NaN    NaN    NaN
comp1      NaN    1.0    NaN    NaN    1.0    NaN    NaN  100.0    NaN    NaN
comp2      NaN  100.0    NaN    NaN    NaN    NaN    NaN  100.0    NaN    NaN
comp1      NaN    NaN    1.0    NaN    NaN    1.0    NaN    NaN  100.0  200.0
comp2      NaN    NaN  100.0    NaN    NaN  100.0    NaN    NaN  100.0  200.0
comp3      NaN    NaN  100.0    NaN    NaN  100.0    NaN    NaN  100.0  200.0
comp4      NaN    NaN    1.0    NaN    NaN    NaN    NaN    NaN    1.0    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...