Корреляция между двумя ячейками Python

#python #python-3.x #dataframe #correlation

#python #python-3.x #фрейм данных #корреляция

Вопрос:

 data = {'Brand':  ['Brand A', 'Brand B','Brand C','Brand D'],
        'Likes': [40500, 39400,25020,28900],
         'Sales Contribution': [0.019,0.307,0.21,0.13]
        }
df = pd.DataFrame.from_dict(data)
  

Используя df.corr() , я могу найти корреляцию между переменными Likes и Sales Contribution .
Я хотел бы найти корреляцию между лайками и вкладом в продажи для каждого бренда.
Как я могу это сделать?

 for row in df:
    print(df['Likes'][row].corr(df['Sales Contribution'][row]))
  

приводит к

 ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-52-d54aac6b3ce8> in <module>
      6 df = pd.DataFrame.from_dict(data)
      7 for row in df:
----> 8     print(df['Likes'][row].corr(df['Sales Contribution'][row]))

E:Anacondalibsite-packagespandascoreseries.py in __getitem__(self, key)
    869         key = com.apply_if_callable(key, self)
    870         try:
--> 871             result = self.index.get_value(self, key)
    872 
    873             if not is_scalar(result):

E:Anacondalibsite-packagespandascoreindexesbase.py in get_value(self, series, key)
   4402         k = self._convert_scalar_indexer(k, kind="getitem")
   4403         try:
-> 4404             return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
   4405         except KeyError as e1:
   4406             if len(self) > 0 and (self.holds_integer() or self.is_boolean()):

pandas_libsindex.pyx in pandas._libs.index.IndexEngine.get_value()

pandas_libsindex.pyx in pandas._libs.index.IndexEngine.get_value()

pandas_libsindex.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas_libsindex_class_helper.pxi in pandas._libs.index.Int64Engine._check_type()

KeyError: 'Brand'

  

Ответ №1:

Перед использованием df.corr() вам необходимо преобразовать ваши данные в dataframe, попробуйте это

 import pandas as pd
data = {'Brand':  ['Brand A', 'Brand B','Brand C','Brand D'],
    'Likes': [40500, 39400,25020,28900],
     'Sales Contribution': [0.019,0.307,0.21,0.13]
    }
df = pd.DataFrame.from_dict(data)
for index, row in df.iterrows():
    print(df['Likes'][row].corr(df['Sales Contribution'][row]))
  

Комментарии:

1. Я обновил код, но он по-прежнему содержал ошибку. Пожалуйста, обратитесь к обновленному вопросу.

2. используйте для индекса, строки в df.iterrows(): в приведенном выше коде вместо этого он разрешает ошибку ключа, но функция corr выдает nan в качестве вывода, посмотрите документацию pandas.pydata.org/pandas-docs/stable/reference/api / … , я не уверен, что вы пытаетесь сделать в части корреляции.

Ответ №2:

импортируйте pandas как pd ваш dic df = pd.DataFrame.from_dict(данные) для строки в df:

Комментарии:

1. Я обновил код, но он по-прежнему содержал ошибку. Пожалуйста, обратитесь к обновленному вопросу.