无法向列表末尾追加元素并正确拼接DataFrame的问题排查
问题分析与解决
问题根源
你遇到的顺序错位问题,核心原因是DataFrame的列遍历顺序是按照列在原数据框中的实际存储顺序来的。如果你的column2在column1和date_column之前,循环时会先执行column2对应的代码块,把三个统计值提前塞进stats列表开头,后续再添加column1和日期的统计值,自然就和descs的顺序对应不上了。
另外你输出里出现的[454]这类列表格式,是因为用agg({column:"mean"})返回的是Series对象,不是单个数值,需要改成直接取均值的写法。
修复后的代码
直接按你需要的统计顺序主动获取数据,不依赖列的遍历顺序,就能保证stats的顺序和descs完全匹配:
import pandas as pd descs = ["a", "b", "c", "d", "e", "f", "g"] data = [{"Description": desc} for desc in descs] stats = [] # 处理column1的三个统计项(对应a、b、c) counts = df["column1"].value_counts() stats.extend([ counts.sum(), counts[True], counts[False] ]) # 处理date_column的统计项(对应d) stats.append(df["date_column"].min().date()) # 处理column2的三个统计项(对应e、f、g) col2_max = df["column2"].max() # 直接用mean()获取单个数值,避免返回Series col2_mean_true = round(df.loc[df["column1"] == True, "column2"].mean(), 2) col2_mean_false = round(df.loc[df["column1"] == False, "column2"].mean(), 2) stats.extend([col2_max, col2_mean_true, col2_mean_false]) # 拼接结果 result_df = pd.concat([pd.DataFrame(data), pd.DataFrame({"Statistic": stats})], axis=1)
效果说明
修复后,stats列表的顺序会严格对应descs的a→b→c→d→e→f→g,拼接后的DataFrame中,column2的三个统计值会准确填充到原来的NaN位置,同时也解决了输出中出现嵌套列表的问题。
内容的提问来源于stack exchange,提问作者JoMcGee
相关产品推荐
相关产品推荐

