Size: a a a

Python для анализа данных

2021 October 15

M

Mikhail in Python для анализа данных
кажется, что автор спрашивал не про решение на R, а мне как-то не очень важно, так что не утруждайтесь 😊
источник

M

Mikhail in Python для анализа данных
можете скинуть csv с примером?
источник

IS

Ilya Shutov in Python для анализа данных
вот это дело.
источник

V

Viktor in Python для анализа данных
Под рукой нет компьютера. Xlsx подойдет?
источник

V

Viktor in Python для анализа данных
источник

IS

Ilya Shutov in Python для анализа данных
Виктор, ответов, увы, не вижу.
На скорую руку идея такая, попробуйте сами на питон переложить.
в melt/pivot идеология похожая

1. Руками создадим унифицированные имена колонок
2. Делаем двойное развертывание. Сначала по покупателям (набор данных вовсе непонятный, имена дал из общих соображений), потом по значениям.

{r}
df <- data.frame(
 index = c(1,2,3,4,5),
 Customer = c("A", NA, "B", "C", NA),
 Value = c(1, NA, 1, 1, NA),
 "Customer(1)" = c(NA, "A", NA, NA, "D"),
 Value = c(NA, 1, NA, NA, 1)
)

# выкинем индекс за ненужностью, переименуем колонки по унифицированным правилам
nn <- 1:ncol(df) %>%
 {paste(ifelse(. %% 2 == 1, "val", "customer"), . %/% 2,  sep = "_")}

df1 <- df %>%
 setnames(nn) %>%
 select(-1) %>%
 # свернули по покупателям
 pivot_longer(cols = starts_with("customer"),
              names_to = "customer",
              values_to = "product") %>%
 drop_na(product) %>%
 # свернули по штукам
 pivot_longer(cols = starts_with("val_"),
              names_to = NULL,
              values_to = "amount") %>%
 drop_na()

df1 %>% count(customer)

Ну вот и получаем примерно такое
> df1
# A tibble: 5 x 3
 customer   product amount
 <chr>      <chr>    <dbl>
1 customer_1 A            1
2 customer_2 A            1
3 customer_1 B            1
4 customer_1 C            1
5 customer_2 D            1

> df1 %>% count(customer)
# A tibble: 2 x 2
 customer       n
 <chr>      <int>
1 customer_1     3
2 customer_2     2
источник

M

Mikhail in Python для анализа данных
а где одна строка?)
источник

IS

Ilya Shutov in Python для анализа данных
здесь одни тролли?
источник

V

Viktor in Python для анализа данных
Огромное спасибо за помощь, вечером попробую.
источник

M

Mikhail in Python для анализа данных
колонок всегда 4? или может быть 6, 8, 12?
источник

V

Viktor in Python для анализа данных
Не всегда 4, может быть и больше
источник

IS

Ilya Shutov in Python для анализа данных
в таком способе представления есть засада — надо предварительно валидировать .
нет никакой защиты от ситуации, что продуктовая колонка N-го покупателя будет содержать NA, а значение не NA

ну либо можно делать это после первой свертки — id каждого покупателя должен совпадать с id переменной.
источник

M

Mikhail in Python для анализа данных
pd.concat((pd.DataFrame(df.iloc[:,i:i+2].values) for i in range(0, len(df.columns), 2)),).groupby(0).sum()
источник

M

Mikhail in Python для анализа данных
берём колонки парами, слепляем вертикально, считаем сумму
источник

IS

Ilya Shutov in Python для анализа данных
да-да. начал писать.
если же нужен тотал без продуктов, то просто суммируются колонки.
нечетные колонки — количество, четные — покупатель
просуммировали, перенесли имя покупателя на имя колонки с суммой и сделали длинное представление

вариантов масса
источник

IS

Ilya Shutov in Python для анализа данных
неверно. нужно по покупателям, а не по продуктам
источник

M

Mikhail in Python для анализа данных
а, типа A B C D это продукт а в колонке айди покупателя?
источник

M

Mikhail in Python для анализа данных
ок
источник

IS

Ilya Shutov in Python для анализа данных
дать ответ — хорошо и правильно.
а когда 2.5 К человек молчат — нехорошо.
вот и весь тезис.
источник

M

Mikhail in Python для анализа данных
def customer_df(df):
   df["customer"] = df.columns[0]
   df.columns = ("product", "value", "customer")
   return df.dropna(subset=["value"])

pd.concat((customer_df(df.iloc[:,i:i+2]) for i in range(0, len(df.columns), 2)))
источник