在新的DataFrame()中更快地重新组织我的数据

2024-04-26 22:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2500000行的大数据集,格式如下:

enter image description here

  • Merkmal==特征
  • Auspraegung\u Code==下一列的代码
  • Auspraegung\u Text==要素中的实际种类
  • Anzahl==此功能的种类数

其余的不是出于兴趣/不言自明

我的问题是,我想让这个DataFrame()将Auspreagung\u文本条目作为列,并为每行中的每个Gitter\u ID指定它们的编号/数量(Anzahl列)

目前我做的是:

df_result = pd.DataFrame()

for i,ids in enumerate(Gitter_ids):

    auspraegungen = df["Auspraegung_Text"][df["Gitter_ID_100m_neu"]==ids ]
    auspraegung_amounts= df["Anzahl"][df["Gitter_ID_100m_neu"]==ids ]

    df_result.loc[i,"Cell_id"] = ids

    for auspraegung,amounts in zip(auspraegungen,auspraegung_amounts):        
        df_result.loc[i,auspraegung] = anzahl

结果DataFrame()应如下所示:

enter image description here

上面的代码正在运行,但是速度非常慢。如何优化流程

这个问题中使用的数据是来自德国的人口普查数据


Tags: 数据代码textididsdataframedffor
1条回答
网友
1楼 · 发布于 2024-04-26 22:19:47

尝试使用pandas.pivot_table

(含虚拟数据)

>>> x=[[1,2,3, "A"], [3,4,2, "B"], [32, 2,34, "C"], [1,2,5, "B"], [241,24,2, "C"], [214, 2,3,"B"]]
>>> df=pd.DataFrame(data=x, columns=["col1", "col2", "col3", "cat"])
>>> df
   col1  col2  col3 cat
0     1     2     3   A
1     3     4     2   B
2    32     2    34   C
3     1     2     5   B
4   241    24     2   C
5   214     2     3   B
>>> pd.pivot_table(df, values=["col1", "col2", "col3"], columns=["cat"])
cat     A          B      C
col1  1.0  72.666667  136.5
col2  2.0   2.666667   13.0
col3  3.0   3.333333   18.0
>>> pd.pivot_table(df, values=["col1", "col2"], index="col3", columns=["cat"])
     col1               col2
cat     A      B      C    A    B     C
col3
2     NaN    3.0  241.0  NaN  4.0  24.0
3     1.0  214.0    NaN  2.0  2.0   NaN
5     NaN    1.0    NaN  NaN  2.0   NaN
34    NaN    NaN   32.0  NaN  NaN   2.0
>>> pd.pivot_table(df, values=["col1"], index=["col3", "col2"], columns=["cat"]).reset_index()
    col3 col2 col1
cat              A      B      C
0      2    4  NaN    3.0    NaN
1      2   24  NaN    NaN  241.0
2      3    2  1.0  214.0    NaN
3      5    2  NaN    1.0    NaN
4     34    2  NaN    NaN   32.0

相关问题 更多 >