Rtu*_*tut 4 python dataframe pandas
我的数据框有很少的重复列名.如果找到重复的列名称,请将重复列合并为一列.我还想保留用逗号分隔的重复列数据.任何人都可以建议一种方法来做到这一点.
我在下面构建了一个例子.在我的实际数据帧中,列名称未知.
输入数据框架:
Col1 Col2 Col3 Col2
A CA1 CA5 CA3 CA5
B CB1 CB5 CB3 CB5
C CC1 CC5 CC3 CC5
D CD1 CD5 CD3 None
E CE1 CE5 CE3 CE5
Run Code Online (Sandbox Code Playgroud)
可以阅读:
df = pd.read_clipboard(names=['Col1','Col2','Col3','Col2'], skiprows=1)
Run Code Online (Sandbox Code Playgroud)
输出数据框架:
Col1 Col2 Col3
A CA1 CA5,CA5 CA3
B CB1 CB5,CB5 CB3
C CC1 CC5,CC5 CC3
D CD1 CD5 CD3
E CE1 CE5,CE5 CE3
Run Code Online (Sandbox Code Playgroud)
你也可以:
df.groupby(df.columns, axis=1).agg(lambda x: ','.join(x.values)))
Col1 Col2 Col3
Index
A CA1 CA2,CA5 CA3
B CB1 CB2,CB5 CB3
C CC1 CC2,CC5 CC3
D CD1 CD2,CD5 CD3
E CE1 CE2,CE5 CE3
Run Code Online (Sandbox Code Playgroud)
详细信息: 用于.groupby()对df.columns重复项进行分组:
df.groupby(df.columns, axis=1).apply(lambda x: x.info())
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, A to E
Data columns (total 1 columns):
Col1 5 non-null object
dtypes: object(1)
memory usage: 80.0+ bytes
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, A to E
Data columns (total 2 columns):
Col2 5 non-null object
Col2 5 non-null object
dtypes: object(2)
memory usage: 120.0+ bytes
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, A to E
Data columns (total 1 columns):
Col3 5 non-null object
dtypes: object(1)
Run Code Online (Sandbox Code Playgroud)
然后,使用.agg()与','.join()倒塌的.values在grouped列,这如下所示:
df.groupby(df.columns, axis=1).apply(lambda x: x.values)
Col1 [[CA1], [CB1], [CC1], [CD1], [CE1]]
Col2 [[CA5, CA5], [CB5, CB5], [CC5, CC5], [CD5, CD5...
Col3 [[CA3], [CB3], [CC3], [CD3], [CE3]]
Run Code Online (Sandbox Code Playgroud)
由于只有重复的列有多个值,所以只有它们会被连接起来,这样你就会得到:
Col1 Col2 Col3
Index
A CA1 CA5,CA5 CA3
B CB1 CB5,CB5 CB3
C CC1 CC5,CC5 CC3
D CD1 CD5,CD5 CD3
E CE1 CE5,CE5 CE3
Run Code Online (Sandbox Code Playgroud)
使用None类型值,您可以:
df.groupby(df.columns, axis=1).apply(lambda x: x.apply(lambda y: ','.join([l for l in y if l is not None]), axis=1))
Run Code Online (Sandbox Code Playgroud)
要得到:
Col1 Col2 Col3
Index
A CA1 CA5,CA5 CA3
B CB1 CB5,CB5 CB3
C CC1 CC5,CC5 CC3
D CD1 CD5 CD3
E CE1 CE5,CE5 CE3
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
df.T.groupby(level=0).agg(','.join).T
Run Code Online (Sandbox Code Playgroud)
数据:
In [207]: df
Out[207]:
Col1 Col2 Col1 Col2 Col3
Index
A CA1 CA2 CA3 CA5 ZA1
B CB1 CB2 CB3 CB5 ZA2
C CC1 CC2 CC3 CC5 ZA3
D CD1 CD2 CD3 CD5 ZA4
E CE1 CE2 CE3 CE5 ZA5
Run Code Online (Sandbox Code Playgroud)
输出:
In [208]: df.T.groupby(level=0).agg(','.join).T
Out[208]:
Col1 Col2 Col3
Index
A CA1,CA3 CA2,CA5 ZA1
B CB1,CB3 CB2,CB5 ZA2
C CC1,CC3 CC2,CC5 ZA3
D CD1,CD3 CD2,CD5 ZA4
E CE1,CE3 CE2,CE5 ZA5
Run Code Online (Sandbox Code Playgroud)
说明:
In [209]: df.T
Out[209]:
Index A B C D E
Col1 CA1 CB1 CC1 CD1 CE1
Col2 CA2 CB2 CC2 CD2 CE2
Col1 CA3 CB3 CC3 CD3 CE3
Col2 CA5 CB5 CC5 CD5 CE5
Col3 ZA1 ZA2 ZA3 ZA4 ZA5
In [210]: df.T.groupby(level=0).agg(','.join)
Out[210]:
Index A B C D E
Col1 CA1,CA3 CB1,CB3 CC1,CC3 CD1,CD3 CE1,CE3
Col2 CA2,CA5 CB2,CB5 CC2,CC5 CD2,CD5 CE2,CE5
Col3 ZA1 ZA2 ZA3 ZA4 ZA5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |