【发布时间】:2022-11-17 19:14:11
【问题描述】:
我在 Python 中使用 pandas 得到了这个 DataFrame:
| Column 1 | Column 2 | Column 3 |
|---|---|---|
| hello | a,b,c | 1,2,3 |
| hi | a,b,c | 4,5,6 |
第 3 列中的值属于第 2 列中的类别。 有没有办法合并我得到此输出的第 2 列和第 3 列?
| Column 1 | a | b | c |
|---|---|---|---|
| hello | 1 | 2 | 3 |
| hi | 4 | 5 | 6 |
任何建议都会非常有帮助!谢谢!
【问题讨论】:
我在 Python 中使用 pandas 得到了这个 DataFrame:
| Column 1 | Column 2 | Column 3 |
|---|---|---|
| hello | a,b,c | 1,2,3 |
| hi | a,b,c | 4,5,6 |
第 3 列中的值属于第 2 列中的类别。 有没有办法合并我得到此输出的第 2 列和第 3 列?
| Column 1 | a | b | c |
|---|---|---|---|
| hello | 1 | 2 | 3 |
| hi | 4 | 5 | 6 |
任何建议都会非常有帮助!谢谢!
【问题讨论】:
您可以在exploding 逗号之后使用pd.crosstab:
new_df = ( df.assign(t=df['Column 2'].str.split(','), a=df['Column 3'].str.split(',')).
explode(['t', 'a']) )
output = ( pd.crosstab(index=new_df['Column 1'], columns=new_df['t'],
values=new_df['a'], aggfunc='sum').reset_index() )
输出:
t Column 1 a b c
0 hello 1 2 3
1 hi 4 5 6
【讨论】:
df.apply(lambda x: pd.Series(x['Column 3'].split(','), index=x['Column2'].split(',')), axis=1)
输出:
a b c
0 1 2 3
1 4 5 6
结果为df1和concat
df1 = df.apply(lambda x: pd.Series(x['Column 3'].split(','), index=x['Column2'].split(',')), axis=1)
pd.concat([df['Column 1'], df1], axis=1)
输出:
col1 a b c
0 hello 1 2 3
1 hi 4 5 6
【讨论】: