Предположим, у меня есть фрейм данных:
import pandas as pd
df = pd.DataFrame({"user_id": [1, 5, 11],
"user_type": ["I", "I", "II"],
"joined_for": [1.4, 9.4, 18.1]})
Теперь я бы хотел:
- Возьмите каждого пользователя
joined_for
и получите потолочное целое число.
- На основе целого числа создайте новый фрейм данных, содержащий числовые последовательности, где максимум - это максимальный номер.
Вот как я это делаю сейчас:
import math
new_df = pd.DataFrame()
for i in range(df.shape[0]):
ceil_num = math.ceil(df.iloc[i]["joined_for"])
new_df = new_df.append(pd.DataFrame({"user_id": df.iloc[i]["user_id"],
"joined_month": range(1, ceil_num+1)}),
ignore_index=True)
new_df = new_df.merge(df.drop(columns="joined_for"), on="user_id")
new_df
- это то, что я хочу, но это так много времени, когда много пользователей, а число joined_for
может быть больше. Есть ли лучший способ сделать это? Быстрее или аккуратнее?