首页 > 解决方案 > 在 Python 中按行或列构建新 df 的最佳方法?

问题描述

我是 Python 中面向对象编程的新手,并且在过去几年中试图分析来自 imessage 的文本消息数据。我正在运行 python 3.8。

我创建了一个包含联系人姓名、月份、年份、短信字符串等的数据框(称为消息)。现在我正在尝试创建一个新的数据框(称为monthly_counts),用于组织每个联系人每月的文本数量.

以下是我编写的尝试执行此操作的代码:

Y = [2016, 2017, 2018, 2019, 2020]
M = [1, 2, 3, 4, 5, 6, 7, 8 , 9 , 10, 11, 12]

all_dates = []
for year in range(len(Y)):
    for month in range(len(M)):
        date = f"{int(M[month])}/{int(Y[year])}"
        all_dates.append(date)

#dataframe to be built 
monthly_counts = pd.DataFrame(index=[all_dates], columns=[contacts.Name])
total = []
values = []

for year in range(len(Y)):
    for month in range(len(M)):
        date = f"{int(M[month])}/{int(Y[year])}"
        monthly_total = 0
        for name in contacts['Display Name'].to_list():
            
            data = messages[messages.year == Y[year]]
            data = data[data.month == M[month]]
            data = data[data.Name == name]
            

            values.append(len(data)) #number of texts /year/month/contact
            
            monthly_total += len(data)
        monthly_counts.loc[date] = pd.Series(values).T
        total.append(monthly_total)

monthly_counts['total'] = total

现在,它不会抛出任何错误。但所有元素最后仍然是“nan”。

我确定有更好的方法来做到这一点?一次构建数据框而不是填充预构建的行会更好吗?

标签: pythonpandasdataframeindexing

解决方案


推荐阅读