我有一个数据帧:pd.DataFrame({“Amount”:[19000000,9873200,823449242]}),我需要将数字转换为数百万的货币($)。即$ 19.00MM,$ 9.88MM和$ 823.45MM。
有没有人知道这样做的快捷方法?
谢谢!
答案 0 :(得分:2)
这简单地划分了值 - 它没有添加$
符号等(这只是改变lambda函数的问题),但Amount仍然是dtype float
所以你可以把它当作号。
In [41]: df = pd.DataFrame({"Amount":[19000000, 9873200, 823449242]})
In [42]: df['MillionsAsFloat'] = df.apply(lambda row: row['Amount'] / 1000000, axis=1
...: )
In [43]: df['MillionsAsString'] = df.apply(lambda row: '$' + str(round(row['Amount']
...: / 1000000,2)) + 'MM', axis=1)
In [44]: df
Out[44]:
Amount MillionsAsFloat MillionsAsString
0 19000000 19.000000 $19.0MM
1 9873200 9.873200 $9.87MM
2 823449242 823.449242 $823.45MM
答案 1 :(得分:1)
我认为以下内容应该有效:
df['($) millions'] = '$' + (df['Amount'].astype(float)/1000000).astype(str) + 'MM'
In [3]:
df['($) millions'] = '$' + (df['Amount'].astype(float)/1000000).astype(str) + 'MM'
df
Out[3]:
Amount ($) millions
0 19000000 $19.0MM
1 9873200 $9.8732MM
2 823449242 $823.449242MM
如果需要,您还可以round
:
In [5]:
df['($) millions'] = '$' + (df['Amount'].astype(float)/1000000).round(2).astype(str) + 'MM'
df
Out[5]:
Amount ($) millions
0 19000000 $19.0MM
1 9873200 $9.87MM
2 823449242 $823.45MM
另一种方法是使用format
对每个值应用apply
:
In [15]:
df['($) millions'] = (df['Amount']/1000000).apply(lambda x: '${:,.2f}MM'.format(x))
df
Out[15]:
Amount ($) millions
0 19000000 $19.00MM
1 9873200 $9.87MM
2 823449242 $823.45MM
但是,我希望第一种方法可以更好地扩展到大型数据集,尽管有时列表推导在字符串方面更快
这是列表理解方法:
In [17]:
df['($) millions'] = ['${:,.2f}MM'.format(x) for x in df['Amount']/1000000]
df
Out[17]:
Amount ($) millions
0 19000000 $19.00MM
1 9873200 $9.87MM
2 823449242 $823.45MM