我具有以下数据框...无法删除单元格的“-”字符并将其修整为右侧的“ int”数字:
Branch Market Company Brand Name MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
1 USA abc xqz A 165 180-190 170-180 170 170
2 USA abc xqz B 165 180-190 170-180 170 170
3 USA abc xqz C 100 120 110-120 120 120
4 USA abc xqz D 95 110 100 100 110
5 USA abc xqz E 59 70 70 70 70
想要以下数据框来绘制散布图,其品牌名称在x轴上,MRP在y轴上。
Branch Market Company Brand Name MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
1 USA abc xqz A 165 185 175 170 170
2 USA abc xqz B 165 185 175 170 170
3 USA abc xqz C 100 120 115 120 120
4 USA abc xqz D 95 110 100 100 110
5 USA abc xqz E 59 70 70 70 70
您能帮忙吗?尝试了许多代码,但无法获得所需的结果/ df。
答案 0 :(得分:0)
让我们尝试一下:
# extract the date columns
cols = [col for col in df.columns if '-' in col]
df[cols] = (df[cols].astype(str).stack()
.str.extractall('(\d+)')
.astype(float).mean(level=[0,1])[0]
.unstack()
)
输出:
Branch Market Company Brand Name MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
-- -------- -------- --------- ------- ------ ----- ------------ ------------ ------------ ------------
0 1 USA abc xqz A 165 92.5 87.5 85 85
1 2 USA abc xqz B 165 92.5 87.5 85 85
2 3 USA abc xqz C 100 60 57.5 60 60
3 4 USA abc xqz D 95 55 50 50 55
4 5 USA abc xqz E 59 35 35 35 35
答案 1 :(得分:0)
带有np.where
和str.split
:
df['2020-05-15'] = np.where((df['2020-05-15'].str.contains('-')),
(df['2020-05-15'].str.split('-').str[0].astype(float) + df['2020-05-15'].str.split('-').str[1].astype(float)) / 2,
df['2020-05-15'])
df['2020-05-19'] = np.where((df['2020-05-19'].str.contains('-')),
(df['2020-05-19'].str.split('-').str[0].astype(float) + df['2020-05-19'].str.split('-').str[1].astype(float)) / 2,
df['2020-05-19'])
df
答案 2 :(得分:0)
使用 Series.str.split
和 statistics.mean
:
dd
输出:
import statistics
df['2020-05-15'] = df['2020-05-15'].str.split('-').apply(lambda x: statistics.mean(list(map(int, x))))
df['2020-05-19'] = df['2020-05-19'].str.split('-').apply(lambda x: statistics.mean(list(map(int, x))))