pandas - 如何增加每列/组的索引

标签 pandas dataframe pandas-groupby

我需要格式化数据框:

| country   | county   | city   | street    |
|-----------|----------|--------|-----------|
| country 1 | county 1 | city 1 | street 1  |
| country 1 | county 1 | city 1 | street 2  |
| country 1 | county 1 | city 2 | street 3  |
| country 2 | county 2 | city 3 | street 4  |
| country 2 | county 2 | city 3 | street 5  |
| country 3 | county 3 | city 4 | street 6  |
| country 3 | county 4 | city 5 | street 7  |
| country 3 | county 4 | city 6 | street 8  |
| country 3 | county 4 | city 6 | street 9  |
| country 3 | county 4 | city 6 | street 10 |

| country   | county   | city   | street    | count |
|-----------|----------|--------|-----------|-------|
| country 1 |          |        |           | 3     |
|           | county 1 |        |           | 3     |
|           |          | city 1 |           | 2     |
|           |          |        | street 1  | 1     |
|           |          |        | street 2  | 1     |
|           |          | city 2 |           | 1     |
|           |          |        | street 3  | 1     |
| country 2 |          |        |           | 2     |
|           | county 2 |        |           | 2     |
|           |          | city 3 |           | 2     |
|           |          |        | street 4  | 1     |
|           |          |        | street 5  | 1     |
| country 3 |          |        |           | 5     |
|           | county 3 |        |           | 1     |
|           |          | city 4 |           | 1     |
|           |          |        | street 6  | 1     |
|           | county 4 |        |           | 4     |
|           |          | city 5 |           | 1     |
|           |          |        | street 7  | 1     |
|           |          | city 6 |           | 3     |
|           |          |        | street 8  | 1     |
|           |          |        | street 9  | 1     |
|           |          |        | street 10 | 1     |

列数可能会有所不同。

我正在管理多个 groupby 的计数并尝试在 python 中格式化但没有成功。有办法只用 Pandas 做吗?

最佳答案

我提出的解决方案适用于任意数量的列,但它不是非常大的数据帧的完美解决方案:

def add_column(col_name,col_value,count,tempdf):
    return tempdf.append({col_name:col_value,'count':count},ignore_index=True)

newdf = pd.DataFrame()
col_arr = df.columns.to_list()
col_dict ={}
for i,row in df.iterrows():
    for col in row.to_dict().keys():
        if current[col] != row[col]:
            for c in col_arr[col_arr.index(col):]:
                current[c] = row[c]
                newdf = add_column(c,row[c],df[lambda x: x[c]==row[c]].shape[0],newdf)

结果将是 newdf:

      country    county    city     street  count
0   country 1       NaN     NaN        NaN    3.0
1         NaN  county 1     NaN        NaN    3.0
2         NaN       NaN  city 1        NaN    2.0
3         NaN       NaN     NaN   street 1    1.0
4         NaN       NaN     NaN   street 2    1.0
5         NaN       NaN  city 2        NaN    1.0
6         NaN       NaN     NaN   street 3    1.0
7   country 2       NaN     NaN        NaN    2.0
8         NaN  county 2     NaN        NaN    2.0
9         NaN       NaN  city 3        NaN    2.0
10        NaN       NaN     NaN   street 4    1.0
11        NaN       NaN     NaN   street 5    1.0
12  country 3       NaN     NaN        NaN    5.0
13        NaN  county 3     NaN        NaN    1.0
14        NaN       NaN  city 4        NaN    1.0
15        NaN       NaN     NaN   street 6    1.0
16        NaN  county 4     NaN        NaN    4.0
17        NaN       NaN  city 5        NaN    1.0
18        NaN       NaN     NaN   street 7    1.0
19        NaN       NaN  city 6        NaN    3.0
20        NaN       NaN     NaN   street 8    1.0
21        NaN       NaN     NaN   street 9    1.0
22        NaN       NaN     NaN  street 10    1.0

关于pandas - 如何增加每列/组的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64342248/

相关文章:

python - Pandas 数据框分组日期时间月

python - Pandas - 从 groupby 操作的前 n 组创建一个新的 DataFrame

python - 无法将十六进制代码转换为 unicode 字符,出现 unicodeescape 错误

python - csv.reader 和 pandas 的区别 - python

scala - 折叠 Spark 数据帧

python - 如何使用变量值来调用数据框?

python - 将 groupby 结果直接合并回数据框

python - 修改具有重复项的 Python DataFrame 行

python - 在 Python 中搜索 Pandas Dataframe

python - 按唯一 ID 分组、应用函数并更新下一组的特定列