我需要格式化数据框:
| 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/