我有一个5行5列的数据帧,我想制作一个1行的新数据帧。我试过使用枢轴,但我不需要agg,我不知道下一步该怎么做。
我使用了Scott Boston在这个链接中的回答来完成这项工作。如何根据多列的值使用python panda将多行合并为一行?
起始表格
月 | ID | 州销售 | >客户||||
---|---|---|---|---|---|---|
0 | 1234 | MN | 44 | 23 | ||
1 | 1234 | MN | 45 | 25 | ||
2 | 1234 | MN | 51 | 27 | ||
3 | 1234 | MN | 47 | <29>|||
4 | 1234 | MN | 44 | 29 | ||
0 | 5555 | 纽约 | 441 | 231 | ||
1 | 5555 | 纽约 | 451>251 | //tr>|||
2 | 5555 | 纽约 | 511 | 271 | ||
3 | 5555 | NY471 | >291 | |||
4 | 5555 | NY | 441 | >291 |
您可以使用itertools.chain
模块来压平数据输入,然后可以删除不需要的列。
这里有一个例子:
from itertools import chain
import pandas as pd
data = [
['0', '1234','MN',44,23],
['1', '1234','MN',45,25],
['2', '1234','MN',51,27],
['3', '1234','MN',47,29],
['4', '1234','MN',44,29]
]
columns = ['month', 'ID', 'state', 'sales', 'customer']
flattened = chain.from_iterable(data)
cols = columns + [
f"{j}_{k}" for k in range(len(columns) -1) for j in columns
]
df = pd.DataFrame([list(flattened)], columns=cols)
columns_to_drop = ['month'] + [
f"{j}_{k}" for k in range(len(columns) - 1) for j in ['ID', 'month']
]
df.drop(columns=columns_to_drop, inplace=True)
print(df)
输出:
ID state sales customer state_0 sales_0 customer_0 state_1 sales_1 customer_1 state_2 sales_2 customer_2 state_3 sales_3 customer_3
0 1234 MN 44 23 MN 45 25 MN 51 27 MN 47 29 MN 44 29