lad*_*bug 5 python group-by pandas
我正在尝试通过将字符串的一部分分组到列中来构建新的数据框。
import pandas
df = pandas.DataFrame([{'A': 'string_300_bla1', 'B': "Hi", 'C': 3},
{'A': 'string_300_blaa2', 'B': "Hello", 'C': 4},
{'A': 'string_487_blaaa1', 'B': "nice", 'C': 9},
{'A': 'string_487_blaaa2', 'B': "day", 'C': 6}])
Run Code Online (Sandbox Code Playgroud)
我想从字符串的这一部分创建一个 groupby
字符串_ 300 _bla1
我试过:
import re
dfs = df['A'].str.contains('.*_\d+_.*', re.IGNORECASE).groupby(df['B'])
Run Code Online (Sandbox Code Playgroud)
我的输出:
<pandas.core.groupby.generic.SeriesGroupBy object at 0x00000279EFD009E8>
Run Code Online (Sandbox Code Playgroud)
良好的输出:
dfs = pandas.DataFrame([{'A': 'string_300', 'B': "Hi\n\nHello"},
{'A': 'string_487', 'B': "nice\n\nday"}])
Run Code Online (Sandbox Code Playgroud)
我们可以做的:
(df.groupby(df.A.str.extract('(\w+_\d+)')[0])
.agg({'B':'\n\n'.join, 'C':'sum'})
.reset_index()
)
Run Code Online (Sandbox Code Playgroud)
输出:
0 B C
0 string_300 Hi\n\nHello 7
1 string_487 nice\n\nday 15
Run Code Online (Sandbox Code Playgroud)
正如@CharlesGleason 所指出的,这是提取数字部分的解决方案:
(df.groupby(df.A.str.extract('\w+_(\d+)')[0])
.agg({'A':'first', 'B':'\n\n'.join, 'C':'sum'})
.reset_index(drop=True)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |