假設我有以下 Pandas 資料框。就是這樣,輸入不能改變。
df1 = pd.DataFrame(np.array([['a', 1,'e', 5],
['b', 2, 'f', 6],
['c', 3, 'g', 7],
['d', 4, 'h', 8]]))
df1.columns = [1,1,2,2]
看看列如何具有相同的名稱?我想要的輸出是將具有相同名稱的列組合在一起(不求和或連接),這意味著將第二列 1 添加到第一列 1 的末尾,如下所示:
df2 = pd.DataFrame(np.array([['a', 'e'],
['b','f'],
['c', 'g'],
['d', 'h'],
[1,5],
[2,6],
[3,7],
[4,8]]))
df2.columns = [1,2]
我該怎么做呢?我可以手動完成,但實際上我有 10 個列標題,每個標題大約 100 次迭代,以及數千行,所以它需要很長時間,我必須對每個新資料集重做。
編輯:實際資料集中的列長度不等。
uj5u.com熱心網友回復:
嘗試使用groupby和explode:
output = df1.groupby(level=0, axis=1).agg(lambda x: x.values.tolist()).explode(df1.columns.unique().tolist())
>>> output
1 2
0 a e
0 1 5
1 b f
1 2 6
2 c g
2 3 7
3 d h
3 4 8
編輯:
要重新排序行,您可以執行以下操作:
output = output.assign(order=output.groupby(level=0).cumcount()).sort_values("order",ignore_index=True).drop("order",axis=1)
>>> output
1 2
0 a e
1 b f
2 c g
3 d h
4 1 5
5 2 6
6 3 7
7 4 8
uj5u.com熱心網友回復:
根據資料的大小,您可以將資料拆分為字典,然后從中創建一個新的資料框:
df1 = pd.DataFrame(np.array([['a', 1, 'e', 5],
['b', 2, 'f', 6],
['c', 3, 'g', 7],
['d', 4, 'h', 8]]))
df1.columns = [1, 1, 2, 2]
dictionary = {}
for column in df1.columns:
items = []
for item in df1[column].values.tolist():
items = item
dictionary[column] = items
new_df = pd.DataFrame(dictionary)
print(new_df)
uj5u.com熱心網友回復:
您可以使用默認值為 list 的字典并回圈遍歷資料框列。使用列名作為字典鍵并將列值附加到字典值。
from collections import defaultdict
d = defaultdict(list)
for i, col in enumerate(df1.columns):
d[col].extend(df1.iloc[:, i].values.tolist())
df = pd.DataFrame.from_dict(d, orient='index').T
print(df)
1 2
0 a e
1 b f
2 c g
3 d h
4 1 5
5 2 6
6 3 7
7 4 8
對于df1.columns = [1,1,2,3],輸出為
1 2 3
0 a e 5
1 b f 6
2 c g 7
3 d h 8
4 1 None None
5 2 None None
6 3 None None
7 4 None None
uj5u.com熱心網友回復:
如果我理解正確,這似乎有效:
pd.concat([s.reset_index(drop=True) for _, s in df1.melt().groupby("variable")["value"]], axis=1)
輸出:
In [3]: pd.concat([s.reset_index(drop=True) for _, s in df1.melt().groupby("variable")["value"]], axis=1)
Out[3]:
value value
0 a e
1 b f
2 c g
3 d h
4 1 5
5 2 6
6 3 7
7 4 8
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/474511.html
上一篇:DataFrame挑戰:將ID映射到不同行中的值。最好用Polars
下一篇:R輸出矩陣索引與資料框中的值
