我有一個 csv 檔案,其中包含以下內容:
名稱、編號、值
A,1 ,X
B,0,Y
C,0 ,Z
A,1 ,Y
A,0 ,Z
C,0 ,X
A,1 ,Y
A,0 ,Z
我如何對其進行分組并使新 csv 檔案的輸出如下所示:
名稱、編號、值
A,1,X,Y,Y
B,0,Y
C,0,Z,X
A,0,Z,Z
所以我在前兩列上設定條件,如果它們匹配,則聚合值。我嘗試閱讀很多關于它的內容,但似乎找不到有關如何添加條件和重新排列資料的說明。
謝謝。
uj5u.com熱心網友回復:
假設您有一個input.csv包含以下內容的CSV 檔案:
Name,Number,Value
A,1,X
B,0,Y
C,0,Z
A,1,Y
A,0,Z
C,0,X
A,1,Y
A,0,Z
您可以使用熊貓來生成您想要的output.csv:
import pandas as pd
df = pd.read_csv('input.csv')
new_df = df.groupby(['Name', 'Number'], as_index=False,
sort=False).agg({'Value': ','.join})
new_df.to_csv('output.csv', index=False)
output.csv 上面運行后:
Name,Number,Value
A,1,"X,Y,Y"
B,0,Y
C,0,"Z,X"
A,0,"Z,Z"
檔案鏈接:
pandas.read_csvpandas.DataFrame.to_csvpandas.DataFrame.groupbypandas.DataFrame.agg
uj5u.com熱心網友回復:
您可以使用字典來累積前兩列匹配的行。在這種情況下,我們使用defaultdictalist作為值型別。
import csv
from collections import defaultdict
tmp = defaultdict(list)
with open("foo.csv", "r") as fin:
reader = csv.reader(fin)
for line in reader:
a,b,val = line
key = (a, b)
tmp[key].append(val)
print(tmp)
defaultdict(list,
{('A', '1'): ['X', 'Y', 'Y'],
('B', '0'): ['Y'],
('C', '0'): ['Z', 'X'],
('A', '0'): ['Z', 'Z']})
with open("outfile.csv", "w") as fout:
writer = csv.writer(fout)
for k, v in tmp.items():
row = list(k) v
writer.writerow(row)
"""
A,1,X,Y,Y
B,0,Y
C,0,Z,X
A,0,Z,Z
"""
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394631.html
標籤:Python
上一篇:x[:,0]是什么?
