Чтобы выбрать конкретную строку и столбец в DataFrame - PullRequest
0 голосов
/ 15 января 2019

Мое требование немного сложнее

ниже дана датафрейм df:

                       Month1 Month2   Month3   Month4 Month5  Month6
Credit               4644.5  11142  6198.33  2830.48   5886  8381.5
No. of transactions       8      4        6       14      6       4

Итак, я хочу сохранить все эти значения в отдельных переменных.

Например, конечный результат должен быть:

CreditMonth1 = 4644.5
CreditMonth2 = 11142 
...
so on.. and
No. of transactionsMonth1 = 8
No. of transactionsMonth2 = 4
...
so on..

вышеуказанный результат может быть достигнут с использованием следующего кода:

CreditMonth1= df.at['Credit', 'Month1']

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

например:

                       Month1   Month2   Month3 
Credit                 5566.45  14275    6194.88  
No. of transactions       4      5        3   

Ожидаемый результат

Я хочу получить индивидуальные данные за все месяцы (до 6 месяцев). если в случае вышеприведенного примера данных за 3 месяца я хочу заполнить значение оставшихся месяцев (т. е. от Month 4 до Month 6 до '0'

Может кто-нибудь помочь мне в этом?

Ответы [ 3 ]

0 голосов
/ 15 января 2019

используйте to_dict. Посмотрите, работает ли это для вас

DF

                   Month1  Month2   Month3   Month4  Month5  Month6
Name                                                               
Credit             4644.5   11142  6198.33  2830.48    5886  8381.5
No.oftransactions     8.0       4     6.00    14.00       6     4.0


['No.Of Transaction{} : {}'.format(key,value) for key, value in df.to_dict(orient='index')['No.oftransactions'].items()]

['{} : {}'.format(key,value) for key, value in df.to_dict(orient='index')['Credit'].items()]

выход

['No.Of TransactionMonth1 : 8.0',
 'No.Of TransactionMonth2 : 4.0',
 'No.Of TransactionMonth3 : 6.0',
 'No.Of TransactionMonth4 : 14.0',
 'No.Of TransactionMonth5 : 6.0',
 'No.Of TransactionMonth6 : 4.0']

['Month1 : 4644.5',
 'Month2 : 11142.0',
 'Month3 : 6198.33',
 'Month4 : 2830.48',
 'Month5 : 5886.0',
 'Month6 : 8381.5']

Обновление

DF

                   Month2   Month3   Month4  Month5  Month6
Name                                                       
Credit              11142  6198.33  2830.48    5886  8381.5
No.oftransactions       4     6.00    14.00       6     4.0

credit = df.to_dict(orient='index')['Credit']
transaction = df.to_dict(orient='index')['No.oftransactions']

['{} : {}'.format('Month{}'.format(key),credit.get('Month{}'.format(key))) for key in range(1,6) ]

выход

Out[455]:

    ['Month1 : None',
     'Month2 : 11142.0',
     'Month3 : 6198.33',
     'Month4 : 2830.48',
     'Month5 : 5886.0']


['No.Of Transaction{} : {}'.format('Month{}'.format(key),transaction.get('Month{}'.format(key))) for key in range(1,6)]

выход

['No.Of TransactionMonth1 : None',
 'No.Of TransactionMonth2 : 4.0',
 'No.Of TransactionMonth3 : 6.0',
 'No.Of TransactionMonth4 : 14.0',
 'No.Of TransactionMonth5 : 6.0']
0 голосов
/ 15 января 2019

Это действительно сработало и решило мою проблему

try:
    if df.at['Credit', 'Month4']:
    SalaryMonth4 = df.at['Salary', 'Month4']
except:
    SalaryMonth4 = 0
0 голосов
/ 15 января 2019

Вы можете выбрать конкретную строку с помощью функции iloc , например df.iloc[some_index]. После этого вы можете перебирать строки вручную. Другой вариант будет использовать df.iterrows() в цикле. Таким образом, вы получаете каждую отдельную строку, и если вы делаете for index, row in df.iterrows(), то все данные находятся в переменной row.

Обновление

for index, data in df.iterrows():
  for m in ['Month_1', .. , 'Month_6']:
    if data[m] == '':
      data[m].replace('', 0, inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...